我写了一个检查两个字符串是否是字谜的方法。即使单词不是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;
}
答案 0 :(得分:3)
letters
是一个char
数组,因此letters[i]
永远不会为负数(char
的范围为0
到2^16-1
)。如果您尝试将其减少到0以下,它将下溢到Character.MAX_VALUE
。将其更改为int[]
。
答案 1 :(得分:1)
在您使用的第一个for
循环中:
letters[c]++;
当c
为char
时。
在另一个for
循环中,cast
c
至int
,在将(int)two.charAt(j)
分配给c
之前执行true
。
此外,您每次都会收到char
,因为letters[index] >= 0
数组中的值不是正值,因此每个索引都存在int[128]
。您需要将数组更改为xml
。