【问题标题】:anagram algorithm fault [duplicate]字谜算法错误[重复]
【发布时间】:2012-11-22 07:23:11
【问题描述】:

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

代码输入失败

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

我的错是什么?

【问题讨论】:

  • 本周是字谜作业周吗?
  • 我会复制许多已经可用的解决方案之一。或者至少阅读它们,因为有更简单、更有效的方法来做到这一点。
  • @PeterLawrey:我不会。这样做没有任何学习。他编写了代码,确定它不起作用,并正在寻求了解原因。这很好。
  • @EricJ。他可能会知道有 O(N ln N) 个解决方案,有 6 行代码,而不是 O(N^2),但如果没有一些研究,OP 不太可能自己解决这个问题。
  • 回到字谜的定义。两个字符串的每个字符的出现次数必须相同。

标签: java algorithm anagram


【解决方案1】:

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

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

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

【讨论】:

  • +1 除此之外,如果要通过那个 for 循环,它将不可避免地返回 false,因为 tmp1 永远不会改变。
  • @YusufBulak 字符串是不可变的,您无法对其进行排序。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    首先,如果您要使用诸如return truereturn false 之类的语句,请始终使用它们(去掉boolean result)。

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

    【讨论】:

    • 我不想用 char 数组制作
    猜你喜欢
    • 2013-05-20
    • 2020-05-11
    • 1970-01-01
    • 2013-09-09
    • 2011-11-03
    • 2011-01-17
    • 2013-07-29
    • 2012-11-21
    • 2012-05-25
    相关资源
    最近更新 更多