使用Scala如何找出字符串中是否存在字符列表,其中有重复的字符?

Sha*_*kti 3 string scala scala-collections

考虑下面的例子,我有一组给定的单词和一组给定的字符.我必须找出是否有一个词可以从字符列表中产生,同时尊重重复 - 即该字是多字节字符的多字节子集.因此对于字符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))
Run Code Online (Sandbox Code Playgroud)

Mar*_*rth 6

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)
Run Code Online (Sandbox Code Playgroud)