给定两个字符串s和t,编写一个函数来确定t是否是s的anagram。
例1:
输入:s=“anagram”,t=“nagaram”
输出:真
例2:
输入:s=”rat”,t=”car”
输出:false
例3
“AAD”
“出租车”
输出
真的
预期

我的3个测试用例给出的输出是真的为什么?

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.isEmpty() && t.isEmpty()) {
            return true;
        }
        if (s.length() != t.length()) {
            return false;
        }
        char[] a = s.toCharArray();
        char[] b = t.toCharArray();

        Arrays.sort(a);
        Arrays.sort(b);
        for (int i = 0; i <= a.length; i++) {
            for (int j = 0; j <= b.length; j++) {
                if (a[i] == b[j]) {
                    return true;
                }
            }
        }
        return false;
    }
}

最佳答案

通过使用嵌套for循环,您将在每个可能的对(i,j)上迭代,i和j an分别位于idex的ab中此外,您使用i++j++两次,因此您将跳过偶数索引。您不能从true匹配时返回a[i++] == b[j++]。为了知道某个东西是否是一个anagram,您需要遍历所有元素但是,您可以从false开始返回a[i] != b[i]最后,界限应该是i < a.length,而不是i <= a.length
因此,您需要一个for循环,在这个循环中进行一次增量并将a[i]b[i]进行比较:

public boolean isAnagram(String s, String t) {
    if(s.length() != t.length()){
        return false;
    }
    char[] a = s.toCharArray();
    char[] b = t.toCharArray();

    Arrays.sort(a);
    Arrays.sort(b);

    for(int i = 0; i < a.length; i++) {
        if(a[i] != b[i]) {
            return false;
        }
    }
    return true;
}

09-17 00:20