我需要一个给定的单词列表来确定它是否包含字谜。 例如:
hasAnagrams(listOf("restful", "elvis", "fluster")) -> true
hasAnagrams(listOf("restful", "elvis", "real")) -> false
我的代码:
fun hasAnagrams(words: List<String>): Boolean =
words.map { it.split(" ") }.forEach { item -> return item.containsAll(item) }
我的代码返回一个单位,但我不知道如何返回布尔值,这使得代码简短,简洁且习惯上正确。另外,我不知道使用.forEach
是否值得,或者是否有更正确的方法可以使用此操作。我是否正确item -> return item.containsAll(item)
写下了这一行?
答案 0 :(得分:1)
在words.map中,将给定的句子中的每个句子都分成单词列表,然后针对此列表中的每个列表,检查此列表中的所有元素是否都在此列表中,这始终是真的。 在此示例中,使用foreach没有意义。它返回Unit,就像Java中的void。
也许您想要这样吗?
fun hasAnagrams(words: List<String>): Boolean = words
.map { it.split("").sorted() } // split given words into list of chars and sort
.distinct() // get only unique lists
.size != words.size // check if number of unique lists is equal to number of words in input list