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

LeetCode「唯一摩尔斯密码词」JavaScript代码异常问题排查

问题分析:LeetCode「唯一摩尔斯密码词」代码失效原因

问题情况

在解决LeetCode「唯一摩尔斯密码词」时,编写的JavaScript代码在一组测试用例中能正常运行,但在另一组测试用例中完全失效,以下是具体测试用例和代码:

测试用例1(代码正常运行)

var arr1 = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-....","-","..-","...-",".--","-..-","-.--","--.."];
var arr2 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var words = ["gin","zen","gig","msg"]

测试用例2(代码失效)

var arr1 = ['z','y','x'];
var arr2 = ['a','b','c'];
var words = ['zzz','xz','zzz','yzx']

问题代码

var mapping={};
for(let i=0;i<arr1.length;i++) {
    mapping[arr1[i]]=arr2[i];
}
const res = word => word.split('').map(c => mapping[c]).join('');
var result = new Set(words.map(res)).size;
console.log(result)

失效原因

核心问题是映射关系完全搞反:

  • 题目要求建立「字母 → 对应摩尔斯密码」的映射,但你的代码把arr1(密码/目标值)作为对象的键,arr2(字母/查询键)作为对象的值。
  • 后续处理单词时,你拿单词里的字母去mapping中查找,但mapping的键根本不是字母,而是arr1里的元素,所以大部分情况下会得到undefined,最终拼接出错误的字符串。
  • 测试用例1能“正常运行”是巧合——大概率是你实际运行时搞反了arr1和arr2的输入顺序,让字母数组作为arr1,摩尔斯码数组作为arr2,刚好匹配了你的错误映射逻辑,才得到了正确结果。

修正后的代码

只需反转映射的键值对,用字母作为键,对应的密码作为值:

var mapping={};
for(let i=0;i<arr1.length;i++) {
    // 字母作为键,对应的密码作为值
    mapping[arr2[i]]=arr1[i];
}
const res = word => word.split('').map(c => mapping[c]).join('');
var result = new Set(words.map(res)).size;
console.log(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:45:28