老师,我在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实现的效率由于考虑到对于泛型的支持,所以效率不高。