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

JavaScript:如何统计字符串重复字符并紧随其后输出计数?

解决字符串压缩:从"aaabbccccddd"到"a3b2c4d3"的正确实现

嘿,我来帮你搞定这个字符串压缩的问题~你的现有代码只统计了连续重复字符的次数,却没把结果拼接成需要的格式,还有几个小bug需要调整,咱们一步步来:

你的代码存在的问题

  • 计数器初始值错误:你把countNumberLetter设为0,但每个字符至少出现1次,最后统计的次数会比实际少1
  • 未处理字符切换场景:当遇到不同字符时,没有把当前统计的字符和次数存入结果,也没重置计数器
  • 遗漏最后一组字符:循环到最后一个字符时,i+1会超出字符串长度,不会触发相同字符的判断,导致最后一组字符的统计结果没被加入
  • 输出时的无效引用:循环结束后i等于字符串长度,countLetters[i]是undefined,这会导致输出错误

修正后的完整代码

const countLetters = "aaabbccccddd";
let result = "";
let countNumberLetter = 1; // 初始为1,每个字符至少出现一次

for (let i = 0; i < countLetters.length; i++) {
  // 比较当前字符与下一个字符
  if (countLetters[i] === countLetters[i + 1]) {
    countNumberLetter++;
  } else {
    // 字符不同时,将当前字符和次数拼入结果
    result += countLetters[i] + countNumberLetter;
    // 重置计数器,准备统计下一组字符
    countNumberLetter = 1;
  }
}

console.log(result); // 输出:a3b2c4d3

代码逻辑解释

  1. 初始化result空字符串,用来存储最终的压缩结果
  2. countNumberLetter从1开始计数,因为每个字符至少出现一次
  3. 遍历字符串时,每次对比当前字符和下一个字符:
    • 如果相同,计数器加1
    • 如果不同(包括最后一个字符,此时countLetters[i+1]为undefined),就把当前字符和统计次数拼到result里,然后重置计数器
  4. 循环结束后,result就是我们需要的压缩格式

更简洁的正则实现

如果你想更高效,还可以用正则表达式一行搞定:

const countLetters = "aaabbccccddd";
const result = countLetters.replace(/(.)\1*/g, (match, char) => char + match.length);
console.log(result); // 输出:a3b2c4d3

这个正则的逻辑是:(.)捕获任意单个字符,\1*匹配该字符的连续重复项,然后把匹配到的内容替换成「捕获的字符 + 匹配内容的长度」。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:06