有效的 Anagram - 有人可以解释为什么我的代码没有通过示例案例 2 吗?

问题描述 投票:0回答:1

给定两个字符串 s 和 t,如果 t 是 s 的变位词则返回 true,否则返回 false。

Anagram 是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。

例一: 输入:s = "anagram", t = "nagaram" 输出:真

例二: 输入: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,当预期为假时,我得到的输出为真。

我相信我的代码应该能满足问题的要求,但它没有按预期工作。我的方法涉及将给定的字符串转换为 char 数组,对其进行排序,然后将其与另一个排序的 char 数组进行比较。我希望如果两个数组的每个索引具有相同的值,那么它们就是字谜。但是,我的方法似乎缺少或不正确。

java arrays hash anagram
1个回答
0
投票

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

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.