考虑下面的示例,我有一组给定的单词和一组给定的字符。我必须找出尊重重复的字符列表中是否可以制成一个单词-即该单词是字符多集的一个多集子集。因此,对于chars List('a', 'p', 'q', 'r', 's')
,单词"apqsrr"
不是有效的解决方案,因为它包含两个'r'
s。我能想到的通常解决方案是遍历单词的字符,如果在字符中找到匹配项,则从字符列表中删除该字符。这可以处理重复项,但是我不知道如何以更实用的方式在scala中编写代码。
据我对scala的了解,我能够编写以下代码,如果没有重复的字母,则可以正常工作。
val words = List("apqsrr", "avadavat", "avail", "availability", "available",
"avalanche", "avantgarde", "avarice")
val chars = List('a', 'p', 'q', 'r', 's')
for (w <- words if w.forall(chars.contains)) yield w
// another way
words.find(_.forall(chars.contains))
scala> words.find(_.diff(chars).isEmpty)
res0: Option[String] = None
scala> val chars = List('a','p','q','r','s','r') // Added another 'r'
chars: List[Char] = List(a, p, q, r, s, r)
scala> words.find(_.diff(chars).isEmpty)
res1: Option[String] = Some(apqsrr)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句