这两个实现中的哪一个更快,为什么要检查字符串anagram

时间:2014-06-29 10:26:19

标签: java time-complexity anagram

首先使用 Arrays.sort

public static void main(String[] args) {
        String s="schoolmaster";
        String s1="theclassroom";

        char a[]=s.toCharArray();
        Arrays.sort(a);
        char a1[]=s1.toCharArray();
        Arrays.sort(a1);
        System.out.println(Arrays.equals(a, a1));


    }

这个使用 hashmap

public static void main(String[] args) {
        String s="murphee";
        String s1="purhmee";

        System.out.println(new Anagram().checkAnagram(s, s1));


    }

    boolean checkAnagram(String s,String s1)
    {
        if(s.length()!=s1.length())
            return false;

        Map<Character,Integer> hs= new HashMap<Character,Integer>();
        char c[]=s.toCharArray();
        for(char cs:c)
        {
            if(hs.containsKey(cs))
            {
                hs.put(cs,hs.get(cs)+1);

            }
            else
                hs.put(cs,0);
        }
        char c1[]=s1.toCharArray();
        for(char cs:c1)
        {
            if(hs.containsKey(cs))
            {
                if(hs.get(cs)!=0)
                hs.put(cs,hs.get(cs)-1);
                else
                hs.remove(cs);
            }
        }
        if(hs.size()==0)
            return true;
        else
            return false;



    }

hashmap的实现是调用put和get几次,isnt比Arrays慢......

请帮助我了解复杂性如何发挥作用,以及是否有其他更好的方法来查找字谜

1 个答案:

答案 0 :(得分:1)

数组实现是O(n * log n)(如果不是最差的话),因为数组正在排序 另一方面,哈希映射实现是O(n),因为每次插入/更改为哈希映射都是O(1),并且您为每个字符执行此操作(O(n)* 2 = O(n) )。

因此,哈希映射实现(理论上)更有效。 但请注意,如果您只处理小型数组,则实际情况并非如此。复杂性计算的目标是大量投入,而不是很小。