JavaScript字符串游程编码问题求助:哈希表方案调试
用哈希表实现JavaScript字符串游程编码
嘿,作为JavaScript新手,想要搞定游程编码却在哈希表这里卡壳太正常了!首先得理清一个关键:游程编码统计的是连续重复的字符次数,而不是整个字符串里某个字符的总次数——这估计是你之前用哈希表失败的核心原因,普通的全局字符统计完全不符合需求。
那怎么用哈希表来适配连续计数的逻辑呢?其实我们可以用哈希表(或者一个简单的对象,本质也是哈希表)来跟踪当前正在处理的连续字符及其次数,配合遍历字符串来逐步构建结果。下面是具体的实现思路和代码:
实现步骤
- 初始化一个哈希表(对象)来保存当前连续字符的信息,比如
let track = { char: '', count: 0 }; - 初始化一个空字符串用来存储最终结果
- 遍历输入字符串的每一个字符:
- 如果当前字符和哈希表里记录的
char相同,就把count加1 - 如果当前字符和哈希表里的
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
相关产品推荐
相关产品推荐

