检查两个字符串是否是变位词
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
的范围是0
到2^16-1
).如果您尝试将其递减到 0 以下,它将下溢到 Character.MAX_VALUE
。将其更改为 int[]
.
在您使用的第一个 for
循环中:
letters[c]++;
当 c
是 char
。
在另一个 for
循环中,您通过执行 (int)two.charAt(j)
将 cast
c
到 int
,然后再将其分配给 c
。
此外,您每次都会得到 true
,因为 char
数组中不能有负值,因此每个索引都存在 letters[index] >= 0
。您需要将数组更改为 int[128]
.
我写了一个方法来检查两个字符串是否是变位词。即使单词不是变位词,该方法也会返回 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
的范围是0
到2^16-1
).如果您尝试将其递减到 0 以下,它将下溢到 Character.MAX_VALUE
。将其更改为 int[]
.
在您使用的第一个 for
循环中:
letters[c]++;
当 c
是 char
。
在另一个 for
循环中,您通过执行 (int)two.charAt(j)
将 cast
c
到 int
,然后再将其分配给 c
。
此外,您每次都会得到 true
,因为 char
数组中不能有负值,因此每个索引都存在 letters[index] >= 0
。您需要将数组更改为 int[128]
.