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

LeetCode同构字符串函数始终返回True问题排查求助

排查同构字符串函数的问题

我正在LeetCode上解决**同构字符串(Isomorphic Strings)**问题,当前实现的函数始终返回true,无法得到预期结果。我希望先自行梳理思路解决问题,暂不参考最优解。以下是我的代码,请帮忙排查问题:

var isIsomorphic = function(s, t) {
    const map = new Map();
    const array1 = [...s];
    const array2 = [...t];
    for (i = 0; i < s.length; i++) {
        if ((map.has(array1[i]) === true) && (map.has(array2[i]) === true)) {
            if (map.get(array1[i]) !== array2[i]) {
                return false;
            } else {
                continue;
            }
        } else if (map.has(array1[i]) === false) {
            map.set(array1[i], array2[i]);
        }
    }
    return true;    
};

问题分析

你的代码存在几个关键问题,导致结果始终不符合预期:

  • 缺失反向映射校验:同构要求字符串的字符是双向唯一对应,你只维护了s到t的单向映射,没有限制多个s字符不能映射到同一个t字符。比如输入s="ab"、t="aa"时,代码会把a→a、b→a都存入映射,最终错误返回true。
  • 条件判断逻辑无效:map.has(array2[i])这个判断完全没用,因为你的map的key都是s的字符,array2[i]是t的字符,永远不会被map.has()命中,等于这个条件分支从未执行过。
  • 循环变量未声明:for循环里的i没有用let/const声明,会变成全局变量,虽不影响功能,但不符合代码规范。

修复思路(基于原逻辑调整,不使用最优解)

要保证双向映射的唯一性,可以维护两个Map分别记录s→t和t→s的对应关系,在添加映射前做双向校验。以下是修复后的代码:

var isIsomorphic = function(s, t) {
    const sToT = new Map();
    const tToS = new Map();
    for (let i = 0; i < s.length; i++) {
        const sChar = s[i];
        const tChar = t[i];
        // 检查s字符已有映射是否匹配当前t字符
        if (sToT.has(sChar)) {
            if (sToT.get(sChar) !== tChar) {
                return false;
            }
        } else {
            // 检查t字符是否已被其他s字符占用
            if (tToS.has(tChar)) {
                return false;
            }
            // 同时添加双向映射
            sToT.set(sChar, tChar);
            tToS.set(tChar, sChar);
        }
    }
    return true;    
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:35:26