我正在练习Java和一些算法,因此我想创建一个程序,以查看两个单词是否是彼此的字谜。我的方法是使用快速排序对单词进行排序,然后查看它们是否匹配。我测试了我的quicksort函数,它似乎可以正常工作。也许我的字谜功能错了?我针对"tac""cat"测试了我的代码,并且得到了false

有人可以看看我的代码,看看我出了什么问题吗?

我的代码:

public static boolean anagram(String s, String t) {
    int lenS = s.length();
    int lenT = t.length();
    if (lenS != lenT) {
        return false;
    }
    else if (quicksort(s) == quicksort(t)) {
            return true;
    }
    else { return false;}
}

public static String quicksort(String s) {
    int len = s.length();
    int median = len/2;     //pivot point
    String sortedString;
    if (len < 2) {
        return s;
    }
    else {
        String str = s.replace(String.valueOf(s.charAt(median-1)), "");
        char pivot = s.charAt(median-1);
        String less = "";
        String greater = "";
        for (int i = 0; i < str.length(); i++) {
            char pointed = str.charAt(i);
            if (pointed <= pivot) {
                less += String.valueOf(pointed);
            }
            else {
                greater += String.valueOf(pointed);
            }
        }
        sortedString = quicksort(less) + pivot + quicksort(greater);
        return sortedString;
    }
}

最佳答案

quicksort(s) == quicksort(t)

问题出在这里-您正在将字符串与==而不是.equals()进行比较!除了愚蠢的学术示例外,您永远不要使用==比较字符串。它是错误和不可预测行为的中流tay柱。有时它会起作用,但在大多数情况下不会起作用(有关该主题的更详细说明,请参见here,但实际上,使用字符串的规则只是“始终使用equals(),切勿使用==。”)

鉴于此,if语句中的条件应为quicksort(s).equals(quicksort(t))

顺便说一句,您可以绕过整个quicksort()方法,而仅使用Arrays.sort()(在字符串上调用toCharArray()之后。)通常,使用库排序总比编写自己的排序方法好,尽管我我知道有家庭作业,例如在需要的地方!

09-05 18:32
查看更多