3 回答

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以使用 aMap<Character,Integer>來(lái)計(jì)算 a 的每個(gè)字符出現(xiàn)的次數(shù)String。如果Map兩個(gè)Strings 生成的 s 相等,您就會(huì)知道相應(yīng)的Strings 是字謎詞。
例如(這里我使用Map<Integer,Long>而不是Map<Character,Integer>因?yàn)樗奖悖?/p>
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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
您可以使用 Google guava 的HashMultiSet
.?該equals()
方法正是這樣做的:
比較指定對(duì)象與此多重集是否相等。如果給定對(duì)象也是多重集并且包含具有相同計(jì)數(shù)的相同元素(無(wú)論順序如何),則返回 true。如果 object 是相同大小的多重集,并且對(duì)于每個(gè)元素,兩個(gè)多重集具有相同的計(jì)數(shù),則此實(shí)現(xiàn)返回 true。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
除了有序的數(shù)據(jù)結(jié)構(gòu)之外,還可以動(dòng)態(tài)地對(duì)數(shù)據(jù)進(jìn)行排序。
由于 Unicode 符號(hào)、代碼點(diǎn)比 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));
}
添加回答
舉報(bào)