0

可能重复:
java中的Anagram算法

    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
  • 输出是字谜(正确结果)

输入代码失败

  • 第一个词是阿萨
  • 第二个词是 asaa
  • 结果是字谜(不正确的结果)

我的错是什么?

4

3 回答 3

4

您的算法很快就确定一个单词是字谜 - 事实上,只要它可以将第一个单词的第一个字母与第二个单词的任何字母匹配:

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

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

于 2012-12-04T15:58:32.663 回答
1

你让i从 0 到a.length()0kb.length(). 所以两个循环变量都从各自字符串的开头开始。

此外,在内部循环true中,如果任何时候 inb中的任何字符与a.

于 2012-12-04T16:00:10.743 回答
0

首先,如果您要使用return trueor之类的语句return false,请始终使用它们(摆脱boolean result)。

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

于 2012-12-04T15:59:23.240 回答