java 有效的变位词-有人能解释一下为什么我的代码不能通过例子2吗?

guz6ccqo  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(161)

给定两个字符串s和t,如果t是s的变位词,则返回true,否则返回false。
变位词是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母。
示例1:输入:s =“anagram”,t =“nagaram”输出:真
示例2:输入:s =“rat”,t =“car”输出:假的

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] s_array = s.toCharArray();
        char[] t_array = t.toCharArray();

        Arrays.sort(s_array);
        Arrays.sort(t_array);

        if (s_array.length == t_array.length) {
            for (int i = 0; i <= s_array.length-1; i++) {
                if (s_array[i] == t_array[i]) {
                    return true;
                }
            }
        }
        return false;
    }
}

对于示例2,当期望值为false时,我得到的输出为true。
我相信我的代码应该满足问题的要求,但它并没有按预期工作。我的方法包括将给定的字符串转换为char数组,对其进行排序,然后将其与另一个排序过的char数组进行比较。我预计如果两个数组的每个索引值相同,则它们是字谜。但是,似乎我的方法中有一些缺失或不正确的地方。

brccelvz

brccelvz1#

排序后,你只需要检查数组是否相等,并将其作为结果返回:

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] s_array = s.toCharArray();
        char[] t_array = t.toCharArray();

        Arrays.sort(s_array);
        Arrays.sort(t_array);

        return Arrays.equals(s_array,t_array);
    }
}

在你的代码中,你应该只在它们不匹配时返回false:

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] s_array = s.toCharArray();
        char[] t_array = t.toCharArray();

        Arrays.sort(s_array);
        Arrays.sort(t_array);

        if (s_array.length == t_array.length) {
            for (int i = 0; i <= s_array.length-1; i++) {
                if (s_array[i] != t_array[i]) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
}
093gszye

093gszye2#

问题是,您在匹配时没有检查其他字符就短路了字符比较,并过早地返回true。你需要在不匹配时短路并返回false,否则在for循环完成后返回true
但在比较中重新发明轮子是没有意义的。使用Arrays.compare

public static boolean isAnagram(String s, String t) {
     char[] s_array = s.toCharArray();
     char[] t_array = t.toCharArray();

     Arrays.sort(s_array);
     Arrays.sort(t_array);
     return Arrays.compare(s_array,t_array) == 0;
}

相关问题