3 回答

TA貢獻1794條經(jīng)驗 獲得超7個贊
最快的算法是將26個英文字符中的每一個映射到唯一的素數(shù)。然后計算字符串的乘積。根據(jù)算術(shù)的基本定理,當且僅當它們的產(chǎn)品相同時,2個字符串是字謎。

TA貢獻2039條經(jīng)驗 獲得超8個贊
如果兩個單詞包含相同數(shù)量的字符和相同的字符,則它們是彼此的字謎。您只需要按字典順序?qū)ψ址M行排序,并確定一個字符串中的所有字符是否與另一個字符串中的所有字符相同且順序相同。
這是一個代碼示例。Arrays在API中查看以了解這里發(fā)生了什么。
public boolean isAnagram(String firstWord, String secondWord) {
char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();
char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();
Arrays.sort(word1);
Arrays.sort(word2);
return Arrays.equals(word1, word2);
}

TA貢獻1827條經(jīng)驗 獲得超4個贊
如果對任一陣列進行排序,則解決方案將變?yōu)镺(n log n)。但是如果你使用一個hashmap,那就是O(n)。經(jīng)過測試和工作。
char[] word1 = "test".toCharArray();
char[] word2 = "tes".toCharArray();
Map<Character, Integer> lettersInWord1 = new HashMap<Character, Integer>();
for (char c : word1) {
int count = 1;
if (lettersInWord1.containsKey(c)) {
count = lettersInWord1.get(c) + 1;
}
lettersInWord1.put(c, count);
}
for (char c : word2) {
int count = -1;
if (lettersInWord1.containsKey(c)) {
count = lettersInWord1.get(c) - 1;
}
lettersInWord1.put(c, count);
}
for (char c : lettersInWord1.keySet()) {
if (lettersInWord1.get(c) != 0) {
return false;
}
}
return true;
添加回答
舉報