考虑以下示例,我有一组给定的 words 和一组给定的 chars . 我必须找出是否有一个单词可以从字符列表中产生,同时尊重重复 - 即该单词是多字节字符的多集子集 . 因此,对于字符 List('a', 'p', 'q', 'r', 's')
,字 "apqsrr"
不是有效的解决方案,因为它包含两个 'r'
. 我能想到的通常的解决方案是迭代单词的字符,如果在字符中找到匹配,则从字符列表中删除该字符 . 这可以处理重复,但我不知道如何在scala中写这个更多 functional way .
根据我对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))
1 回答