检查两个字符串是否是变位词

Check whether two String's are 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;
}

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

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

letters[c]++;

cchar
在另一个 for 循环中,您通过执行 (int)two.charAt(j)cast cint,然后再将其分配给 c

此外,您每次都会得到 true,因为 char 数组中不能有负值,因此每个索引都存在 letters[index] >= 0。您需要将数组更改为 int[128].