3 回答
TA贡献1886条经验 获得超2个赞
您可以使用 aMap<Character,Integer>来计算 a 的每个字符出现的次数String。如果Map两个Strings 生成的 s 相等,您就会知道相应的Strings 是字谜词。
例如(这里我使用Map<Integer,Long>而不是Map<Character,Integer>因为它更方便):
String one = "animal";
String two = "manila";
Map<Integer,Long> mapOne = one.chars ().boxed().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
Map<Integer,Long> mapTwo = two.chars ().boxed().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
System.out.println ("Is anagram? " + mapOne.equals(mapTwo));
输出:
Is anagram? true
TA贡献1780条经验 获得超1个赞
您可以使用 Google guava 的HashMultiSet
. 该equals()
方法正是这样做的:
比较指定对象与此多重集是否相等。如果给定对象也是多重集并且包含具有相同计数的相同元素(无论顺序如何),则返回 true。如果 object 是相同大小的多重集,并且对于每个元素,两个多重集具有相同的计数,则此实现返回 true。
TA贡献1828条经验 获得超3个赞
除了有序的数据结构之外,还可以动态地对数据进行排序。
由于 Unicode 符号、代码点比 UTF-16 更好char,我将使用 Unicodeint代替:
int[] canonical(String s) {
return s.codePoints().sorted().toArray();
}
boolean isAnagram(String s, String t) {
return Arrays.equals(canonical(s), canonical(t));
}
boolean isAnagram(int[] s, String t) {
return Arrays.equals(s, canonical(t));
}
添加回答
举报