You need to enable JavaScript to run this app. 传入字符串重复字符统计JS实现报错:Codewars题解答
优惠活动
大模型
产品
解决方案
定价
更多

传入字符串重复字符统计JS实现报错:Codewars题解答

Codewars平台编程题需求

我在Codewars刷题时遇到一道题,要求识别传入字符串中的相同字符,返回字符串中出现次数达到两次及以上的字符。我自己写了实现代码,运行后直接抛错,由于编程经验尚浅,找不出问题出在哪,也不知道怎么调整才能符合题目要求。

我写的原始代码
function duplicateCount(text){
  text.split('')
  for(var i = 0, i < text.length, i++) {
    for(var j = 1, j < text.length + 1, j++)
      if(text[j] = text[i]) {
        return text[i]
      }
    else return
  }
  //...
}
代码的具体错误点
  • text.split('')这行完全没生效:split方法不会修改原字符串,执行完必须把返回的数组存下来才能用,当前写法调用完啥也不存,等于白写
  • for循环语法写错了:JS的for循环三个部分(初始化、循环判断、步长更新)之间必须用分号分隔,你现在全用逗号连起来,语法层面就不成立,运行环境直接抛语法错误,根本进不了循环逻辑
  • 内层循环的边界写歪了:j从1开始遍历,判断条件还写的j < text.length + 1,既会读到字符串范围外的undefined值做比较,也会漏掉需要遍历的有效字符位置
  • 相等判断写成了赋值:if里的判断条件用了单等号text[j] = text[i],这行代码不是在判断两个位置的字符是否相等,是直接把text[i]的值赋值给text[j],既篡改了原字符串,也永远不可能触发我们想要的相等判断逻辑,要做相等判断得用===或者==
  • 循环逻辑完全不对:你现在的代码是,只要第一次内层循环没匹配上,就直接走else分支return退出了,根本不会遍历剩下的位置;就算真的匹配上重复字符,也是直接返回单个字符就退出,既收集不全所有重复字符,也从头到尾没有统计字符出现次数的逻辑
  • 缺了必要的边界兼容:没有统一字符的大小写(这道题原题是不区分大小写的,比如'A'和'a'要算同一个重复字符),也没有对重复字符去重,就算跑通了也拿不到正确结果
能正常通过测试的修正版本
function duplicateCount(text){
  // 全转小写,不区分大小写统计
  const normalizedText = text.toLowerCase();
  // 用对象存每个字符的出现次数
  const charCount = {};
  for (const char of normalizedText) {
    charCount[char] = (charCount[char] || 0) + 1;
  }
  // 筛选出出现次数≥2的字符,返回对应数量(符合原题的返回值要求)
  return Object.values(charCount).filter(count => count >= 2).length;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 12:06:05