3 回答
TA贡献1794条经验 获得超7个赞
最快的算法是将26个英文字符中的每一个映射到唯一的素数。然后计算字符串的乘积。根据算术的基本定理,当且仅当它们的产品相同时,2个字符串是字谜。
TA贡献2039条经验 获得超7个赞
如果两个单词包含相同数量的字符和相同的字符,则它们是彼此的字谜。您只需要按字典顺序对字符进行排序,并确定一个字符串中的所有字符是否与另一个字符串中的所有字符相同且顺序相同。
这是一个代码示例。Arrays在API中查看以了解这里发生了什么。
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条经验 获得超4个赞
如果对任一阵列进行排序,则解决方案将变为O(n log n)。但是如果你使用一个hashmap,那就是O(n)。经过测试和工作。
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;
添加回答
举报