如何用JavaScript实现字符串游程编码(RLE)转换功能
游程编码 JavaScript 实现方案
实现思路
- 先处理边界场景:输入为空字符串时直接返回空,避免后续逻辑报错
- 初始化三个变量:存储最终结果的数组(数组拼接性能远高于字符串反复拼接)、当前正在统计的连续字符、当前字符的连续出现次数,初始状态下默认取第一个字符作为统计起点,计数为1
- 从字符串第二个下标位置开始遍历,逐个对比当前字符与正在统计的字符:
- 两者相等则计数+1
- 两者不等则先把上一段的统计结果写入结果数组:若计数为1直接写入字符,否则写入
计数+字符的拼接值,随后重置统计字符为当前字符、计数重置为1
- 遍历结束后,需要把最后一段未写入的统计结果追加到结果数组,最后把结果数组转成字符串返回即可
完整代码实现
function runLengthEncode(str) { // 空字符串直接返回 if (!str.length) return '' let result = [] let currentChar = str[0] let count = 1 for (let i = 1; i < str.length; i++) { if (str[i] === currentChar) { count++ } else { // 计数为1只存字符,否则存计数+字符 result.push(count === 1 ? currentChar : `${count}${currentChar}`) currentChar = str[i] count = 1 } } // 处理最后一组连续字符 result.push(count === 1 ? currentChar : `${count}${currentChar}`) return result.join('') }
测试验证
使用示例输入测试:
const input = 'AAABBBBCCX9999!!!!!!**' console.log(runLengthEncode(input)) // 输出:3A4B2CX496!2* 完全符合要求
内容的提问来源于stack exchange,提问作者Luiz Delgado Gomes
相关产品推荐
相关产品推荐

