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

JavaScript实现字符串连续字符计数 修复代码无法获取首元素问题

连续重复字符计数格式转换代码问题排查与修正

需求为统计字符串中连续重复字符的出现次数,将原字符串转换为「字符+连续出现次数」的格式,例:

  • 输入"aaabccdd",输出"a3b1c2d2"
  • 输入"aabbcdd",输出"a2b2c1d2"

原代码核心问题

  • 首字符处理逻辑遗漏:循环从索引0启动时,首字符对应的i-1值为undefined,原代码的非重复字符判断分支加了string[i-1] !==undefined的限制,直接跳过了首字符的处理流程,首字符从始至终不会被写入结果字符串。
  • 结果拼接时机错误:只要当前字符和下一个字符相等就立刻执行拼接,会导致同一组连续字符被重复写入。以连续3个a的场景为例,i=0时会拼接a2,i=1时又会拼接a3,最终生成冗余错误内容。
  • 末尾边界缺失:循环遍历到字符串最后一位时,i+1为undefined,原代码没有针对最后一组连续字符的收尾拼接逻辑,会丢失末尾的字符统计结果。
  • 存在无效代码:函数定义了从未被使用的len形参,属于冗余内容。

修正逻辑

  • 移除无效的len参数,新增空输入边界判断,避免传入空字符串时报错。
  • 初始化计数变量默认值为1,从字符串第二个字符(索引1)开始遍历,降低边界判断复杂度。
  • 遍历过程中每次比较当前字符和上一个字符:相等则计数累加1;不相等则先把上一个字符和对应的计数拼接到结果,再将计数重置为1。
  • 循环结束后,单独拼接最后一组连续字符和对应的计数,避免末尾内容丢失。

修正后可运行代码

function check(string) {
  if (!string) return "";
  let new_string = "";
  let count = 1;
  for (let i = 1; i < string.length; i++) {
    if (string[i] === string[i-1]) {
      count++;
    } else {
      new_string += string[i-1] + count;
      count = 1;
    }
  }
  // 拼接最后一组字符的统计结果
  new_string += string[string.length - 1] + count;
  console.log(new_string);
  return new_string;
}

// 测试验证
check("aaabccdd"); // 输出 a3b1c2d2
check("aabbcdd");  // 输出 a2b2c1d2
check("a");        // 输出 a1
check("aaaa");     // 输出 a4

首字符丢失的根本原因

原代码的两个拼接分支都没有覆盖首字符场景:重复字符分支在匹配到相等时拼接的是下一位字符(string[i+1]),非重复字符分支直接排除了i=0的首字符场景,导致首字符永远不会被写入结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:09:29