我正在阅读代码片段,我想知道为什么以下可以检查str1和str2是否是字谜.
boolean result = str1.chars().allMatch( c1 -> str2.chars()
.anyMatch( c2 -> c1 == c2) );
Run Code Online (Sandbox Code Playgroud)
我特别困惑的是,如果str1 ="abc"str2 ="cbad",结果也应该是真的,对吗?
我特别困惑的是,如果str1 ="abc"str2 ="cbad",结果也应该是真的,对吗?
代码将返回true,是的.所以不,它不是一个有效的检查anagram,因为在你引用的例子中,它会说它是一个字谜而不是(因为str1没有d).
在字谜中,两个字符串都需要具有相同字母的相同出现次数.其中一个副产品是它们需要相同的长度(尽管在某些字谜方案中,您可以改变空格的数量并添加/删除标点符号).
因此,有效的检查需要确保str1(可能忽略空格和标点符号)中的每个字符都消耗了一个字符str2,并且最后没有str2左边的字符(可能忽略空格和标点符号).有很多方法可以做到这一点(计算出现次数str1,可能是a Map,然后倒计时匹配str2;有一个字符串,你删除字母等)引用的代码不是其中之一.