Leetcode 242-有效的字谜:为什么我的代码在这个测试用例中失败了?

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

提示如下:给定两个字符串 s 和 t,如果 t 是 s 的字谜词,则返回 true,否则返回 false。

我尝试通过创建一个 if 语句来检查两个哈希图的大小是否相同来修复它,但这没有做任何事情。

这是我的解决方案:

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        HashMap<Character, Integer> stringS = new HashMap<>();
        HashMap<Character, Integer> stringT = new HashMap<>();
        for(int i = 0; i < s.length(); i++){
            stringS.put(s.charAt(i), stringS.getOrDefault(s.charAt(i), 0) + 1);
        }
        for(int i = 0; i < t.length(); i++){
            stringT.put(t.charAt(i), stringT.getOrDefault(t.charAt(i), 0) + 1);
        }
        for(int i = 0; i < stringS.size(); i++){
            if(!stringT.containsKey(s.charAt(i)) || !stringT.get(s.charAt(i)).equals(stringS.get(s.charAt(i)))){
                return false;
            }
        }
        return true;
    }
}

它通过了 41/42 个测试用例,但未通过以下测试用例: 输入 s =“疾病” t =“莳萝” 输出:真 预期:假

data-structures hashmap anagram
1个回答
0
投票

我认为您的代码中有一些问题。正确的代码将如下所示。我已经用你的场景模拟了这个测试代码并且它通过了。

 class Solution {
public boolean isAnagram(String s, String t) {
    if (s.length() != t.length()) {
        return false;
    }

    HashMap<Character, Integer> stringS = new HashMap<>();
    HashMap<Character, Integer> stringT = new HashMap<>();


    for (int i = 0; i < s.length(); i++) {
        stringS.put(s.charAt(i), stringS.getOrDefault(s.charAt(i), 0) + 1);
    }

    for (int i = 0; i < t.length(); i++) {
        stringT.put(t.charAt(i), stringT.getOrDefault(t.charAt(i), 0) + 1);
    }

    // Check if the frequencies of characters match
    for (char c : stringS.keySet()) {
        if (!stringT.containsKey(c) || !stringT.get(c).equals(stringS.get(c))) {
            return false;
        }
    }

    return true;
}
}

问题是

  • 循环迭代到“stringS”的大小,但它应该迭代字符串的字符
  • 检查频率是否匹配的条件不正确
© www.soinside.com 2019 - 2024. All rights reserved.