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

LeetCode字符串排列题中JS字符计数代码的差异疑问

LeetCode字符串排列问题的字符计数代码差异分析

原参考代码的作用是统计字符串s1中每个字符的出现次数,逻辑正确:

let neededChar = {}; 
for (let i = 0; i < s1.length; i++) {
     neededChar[s1[i]] = (neededChar[s1[i]] || 0) + 1;
}
  • 字符首次出现时,neededChar[s1[i]]为undefined,undefined || 0取0,加1后赋值为1,正确记录首次出现次数
  • 字符重复出现时,直接取已有计数值加1,更新计数

以下是你改写的两种写法的问题分析:

写法1的错误

neededChar[s1[i]] = neededChar[s1[i]] ? neededChar[s1[i]]++  : 0;
  • 首次出现字符时,neededChar[s1[i]]为undefined,走else分支赋值0,本该赋值1,计数直接少1
  • 重复出现字符时,neededChar[s1[i]]++是后置自增,会先返回当前值再自增。比如当前值是1,赋值时会把1重新赋给neededChar[s1[i]],之后才自增到2,但赋值覆盖了自增结果,最终计数值还是1,完全无法正确统计重复次数

写法2的错误

if(neededChar[s1[i]]){
neededCharp[s1[i]]++;
}else{
needChar[s1[i]] = 0;
}
  1. 拼写错误:neededCharp和needChar都是笔误,应该是neededChar,这会直接导致变量未定义报错
  2. 逻辑错误:else分支赋值0是错的,首次出现字符应该赋值1,否则所有字符的初始计数都是0,后续自增后也会比实际次数少1,导致整个计数逻辑失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:35:36