检查两个String是否是anagram

时间:2016-01-03 08:01:59

标签: java anagram

我写了一个检查两个字符串是否是字谜的方法。即使单词不是anagram,该方法也会返回true。我没有看到代码中的任何错误,任何想法我如何改进?方法如下,

public static boolean checkAnagram( String one, String two){

    if ( one.length() != two.length() ) 
        return false;

    char[] letters  = new char[128];

    for ( char c: one.toCharArray()){

        letters[c]++;
    } 


    for( int j =0; j < two.length(); j++){

        int c = (int) two.charAt(j);

        if( --letters[c] < 0) return false;

    }

    return true;
}

2 个答案:

答案 0 :(得分:3)

letters是一个char数组,因此letters[i]永远不会为负数(char的范围为02^16-1)。如果您尝试将其减少到0以下,它将下溢到Character.MAX_VALUE。将其更改为int[]

答案 1 :(得分:1)

在您使用的第一个for循环中:

letters[c]++;
cchar


在另一个for循环中,cast cint,在将(int)two.charAt(j)分配给c之前执行true

此外,您每次都会收到char,因为letters[index] >= 0数组中的值不是正值,因此每个索引都存在int[128]。您需要将数组更改为xml