老师,我在leetcode上执行了,用Map比数组排序耗时要长,这个是怎么回事呢?
/**
* 有效的字母异位词-Map方式
* 耗时 46ms
*
* @param s
* @param t
* @return
*/
public static boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char c1[] = s.toCharArray();
char c2[] = t.toCharArray();
Map<Character, Integer> map1 = new HashMap<>();
Map<Character, Integer> map2 = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if (map1.get(c1[i]) == null) {
map1.put(c1[i], 0);
} else {
map1.put(c1[i], map1.get(c1[i]) + 1);
}
if (map2.get(c2[i]) == null) {
map2.put(c2[i], 0);
} else {
map2.put(c2[i], map2.get(c2[i]) + 1);
}
}
return map1.equals(map2);
}
/**
* 有效的字母异位词-数组排序方式
* 耗时 7ms
*
* @param s
* @param t
* @return
*/
public static boolean isAnagram2(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char c1[] = s.toCharArray();
char c2[] = t.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
return String.copyValueOf(c1).equals(String.copyValueOf(c2));
}
展开
作者回复: 说明几点:
1 测试数据的单词平均长度比较短
2 官方map实现的效率由于考虑到对于泛型的支持,所以效率不高。