You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 242:我的有效字母异位词代码为何测试用例失败?

问题分析与修复方案

核心错误点

你的代码第三个循环逻辑完全错误:

  • 你用i遍历stringS.size()的范围,然后通过s.charAt(i)获取字符来检查哈希表,但stringS.size()是不同字符的数量,而s.charAt(i)是原字符串第i位的字符,两者没有对应关系。
  • 以测试用例s="ills"、t="dill"为例:stringS包含'i'、'l'、's'三个键,size为3,循环仅执行3次,取的是s[0]='i'、s[1]='l'、s[2]='l'——完全没遍历到stringS中的s键,自然不会检查t里是否存在s,导致错误返回true。

修复方案

正确的做法是直接遍历stringS的所有键,逐一和stringT对比:

  1. 先判断两个哈希表的size是否相等,不等直接返回false(异位词的不同字符数量必然一致);
  2. 遍历stringS的每个键,检查stringT是否包含该键,且对应计数相等。

修复后的代码:

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);
        }
        // 先判断哈希表大小,提前排除不匹配情况
        if (stringS.size() != stringT.size()) {
            return false;
        }
        // 遍历stringS的所有键进行对比
        for (char c : stringS.keySet()) {
            if(!stringT.containsKey(c) || !stringT.get(c).equals(stringS.get(c))){
                return false;
            }
        }
        return true;
    }
}

额外优化思路

如果想进一步简化代码,可以只用一个哈希表:

  • 先遍历s,统计每个字符的计数(加1);
  • 再遍历t,每个字符的计数减1;
  • 最后检查哈希表中所有值是否为0。

示例代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        HashMap<Character, Integer> countMap = new HashMap<>();
        for(char c : s.toCharArray()){
            countMap.put(c, countMap.getOrDefault(c, 0) + 1);
        }
        for(char c : t.toCharArray()){
            countMap.put(c, countMap.getOrDefault(c, 0) - 1);
            // 提前终止:如果某个字符计数为负,说明t中该字符比s多
            if(countMap.get(c) < 0){
                return false;
            }
        }
        // 检查所有字符计数是否为0
        for(int count : countMap.values()){
            if(count != 0){
                return false;
            }
        }
        return true;
    }
}

内容的提问来源于stack exchange,提问作者egoldman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:33:33