public static boolean test(String a, String b) {
a=a.toLowerCase();
b=b.toLowerCase();
boolean result = true ;
boolean tmp1=false;
if(a.length()==b.length()){
for(int i=0;i<a.length();i++){
tmp1=false;
for(int k=0;k<b.length();k++){
if(a.charAt(i)==b.charAt(k)){
return true;
}
}
if(tmp1==false){
result=false;
break;
}
if(i==a.length()-1)
result=true;
}
}
else {
result=false;
}
return result;
}
我想制作一个程序来查找字谜词。
当输入
时,代码可以正常工作输入
的代码失败我的错是什么?
答案 0 :(得分:4)
你的算法太快决定一个单词是一个字谜 - 实际上,只要它能将第一个单词的第一个字母与第二个单词的任何字母相匹配:
if(a.charAt(i)==b.charAt(k)){
return true;
}
Java中最简单的anagram检测算法如下:
a
和b
to arrays of characters charArrayA
和charArrayB
charArrayA
和charArrayB
sortedA
和sortedB
sortedA.equals(sortedB)
。答案 1 :(得分:1)
您让i
从0到a.length()
和k
从0到b.length()
。因此,两个循环变量都从相应字符串的开头开始。
此外,在内部循环中,如果true
中的任何字符与b
中的字符匹配,则立即为整个函数返回a
。
答案 2 :(得分:0)
首先,如果您要使用return true
或return false
等语句,请始终如一地使用它们(摆脱boolean result
)。
此算法的问题是,只要它检测到一对相同的字符,它就会返回true。要解决此问题,请考虑对两个字符串进行排序并测试所有字符的相等性(提示:Arrays.sort
和String.toCharArray
)。