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

JavaScript字符串游程编码问题求助:哈希表方案调试

用哈希表实现JavaScript字符串游程编码

嘿,作为JavaScript新手,想要搞定游程编码却在哈希表这里卡壳太正常了!首先得理清一个关键:游程编码统计的是连续重复的字符次数,而不是整个字符串里某个字符的总次数——这估计是你之前用哈希表失败的核心原因,普通的全局字符统计完全不符合需求。

那怎么用哈希表来适配连续计数的逻辑呢?其实我们可以用哈希表(或者一个简单的对象,本质也是哈希表)来跟踪当前正在处理的连续字符及其次数,配合遍历字符串来逐步构建结果。下面是具体的实现思路和代码:

实现步骤

  • 初始化一个哈希表(对象)来保存当前连续字符的信息,比如let track = { char: '', count: 0 };
  • 初始化一个空字符串用来存储最终结果
  • 遍历输入字符串的每一个字符:
    1. 如果当前字符和哈希表里记录的char相同,就把count加1
    2. 如果当前字符和哈希表里的char不同:
      • 如果哈希表里已经有记录(不是初始空状态),就把之前的字符和次数拼到结果里
      • 更新哈希表的char为当前字符,count重置为1
  • 遍历结束后,别忘了把最后一组连续字符的信息也拼到结果里
  • 返回最终的结果字符串

完整代码示例

const rle = (input) => {
  // 处理空输入的边界情况
  if (!input) return '';

  // 用哈希表(对象)跟踪当前连续字符
  const track = { char: input[0], count: 1 };
  let result = '';

  // 从第二个字符开始遍历
  for (let i = 1; i < input.length; i++) {
    const currentChar = input[i];
    if (currentChar === track.char) {
      // 字符相同,计数加1
      track.count++;
    } else {
      // 字符不同,把之前的结果拼进去,更新跟踪信息
      result += `${track.char}${track.count}`;
      track.char = currentChar;
      track.count = 1;
    }
  }

  // 把最后一组字符的信息拼进去
  result += `${track.char}${track.count}`;
  return result;
};

// 测试用例
console.log(rle("a")); // 输出 "a1"
console.log(rle("aabbbaa")); // 输出 "a2b3a2"

调试小技巧

如果你后续还要自己调试,可以在遍历过程中加入console.log,查看每一步的跟踪状态和结果:

// 在循环里加这行,看每一步的变化
console.log(`当前字符: ${currentChar}, 跟踪状态:`, track, `当前结果: ${result}`);

这样你就能清楚看到什么时候计数增加,什么时候切换字符并拼接结果,很容易找到哪里出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:48