anagram算法错误

时间:2012-12-04 15:55:26

标签: java algorithm anagram

  

可能重复:
  Anagram algorithm in java

    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;

}

我想制作一个程序来查找字谜词。

当输入

时,代码可以正常工作
  • 字一是dsa
  • 第二个字是asd
  • 输出为anagram(正确结果)

输入

的代码失败
  • 第一个词是assa
  • 第二个字是asaa
  • 结果是anagram(INCORRECT结果)

我的错是什么?

3 个答案:

答案 0 :(得分:4)

你的算法太快决定一个单词是一个字谜 - 实际上,只要它能将第一个单词的第一个字母与第二个单词的任何字母相匹配:

if(a.charAt(i)==b.charAt(k)){
    return true;
}

Java中最简单的anagram检测算法如下:

答案 1 :(得分:1)

您让i从0到a.length()k从0到b.length()。因此,两个循环变量都从相应字符串的开头开始。

此外,在内部循环中,如果true中的任何字符与b中的字符匹配,则立即为整个函数返回a

答案 2 :(得分:0)

首先,如果您要使用return truereturn false等语句,请始终如一地使用它们(摆脱boolean result)。

此算法的问题是,只要它检测到一对相同的字符,它就会返回true。要解决此问题,请考虑对两个字符串进行排序并测试所有字符的相等性(提示:Arrays.sortString.toCharArray)。