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

如何不使用正则表达式统计字符串连续相同字符并输出压缩结果

实现方案

思路说明

  • 仅需一次遍历字符串即可完成统计,时间复杂度O(n),空间复杂度O(1)(不计输出结果的存储空间)
  • 维护两个临时变量:currentChar存储当前统计的连续字符,count存储当前字符的连续出现次数
  • 遇到和currentChar不同的字符时,将已统计的字符和次数写入结果,重置临时变量即可
  • 无需将字符串转为数组,直接通过索引访问字符串字符即可

完整可运行代码

function countContinuousChar(str) {
  // 空字符串直接返回
  if (!str) return ''
  let result = ''
  let currentChar = str[0]
  let count = 1
  // 从第二个字符开始遍历
  for (let i = 1; i < str.length; i++) {
    if (str[i] === currentChar) {
      count++
    } else {
      // 拼接上一组统计结果
      result += `${currentChar}${count}`
      // 重置临时变量
      currentChar = str[i]
      count = 1
    }
  }
  // 遍历结束后拼接最后一组的结果
  result += `${currentChar}${count}`
  return result
}
console.log(countContinuousChar('dddmmmmccccaaamm')) // 输出 d3m4c4a3m2

原代码问题说明

原有代码使用indexOf查找字符位置的逻辑不适用本需求:indexOf会查找字符在整个数组中所有出现的位置,无法区分是否是连续出现的,比如字符串末尾的m会被识别为和开头d之后的m是同一组,无法实现分连续段统计的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:05