首页 > 解决方案 > 在 Valid Anagram 程序中未通过所有测试用例

问题描述

给定两个字符串 s 和 t ,编写一个函数来确定 t 是否是 s 的字谜。

示例 1:

输入:s = "anagram", t = "nagaram" 输出:true 示例 2:

输入:s = "rat", t = "car" 输出:false

示例 3 "aad" "cab" 输出 true 预期 false

我的 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;
    }
}

标签: javaarraysalgorithmloopsdata-structures

解决方案


通过使用嵌套的 for 循环,您将遍历每个可能的对(i, j),其中ij分别位于 idexab中。此外,您使用i++andj++两次,因此您将跳过偶数索引。您不能从比赛true的那一刻返回。a[i++] == b[j++]为了知道某物是否是字谜,您需要遍历所有元素。但是,您可以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;
}

推荐阅读