基于游程编码(Run Length Encoding)的大写字母字符串压缩需求
游程编码(Run Length Encoding)实现方案
游程编码的核心就是统计连续重复字符的出现次数,然后把「次数+字符」的组合拼接成结果字符串就行。针对你给出的输入示例 "AABBBACCDA",输出 "2A3B1A2C1D1A",我来给你一步步拆解实现思路,再附上可运行的代码。
核心思路拆解
- 先处理空字符串的边界情况(避免索引报错)
- 初始化两个变量:一个记录当前统计的字符(默认从第一个字符开始),一个记录当前字符的连续出现次数(初始为1)
- 从第二个字符开始遍历整个字符串:
- 如果当前字符和之前记录的字符相同,就把计数加1
- 如果不同,就把「计数+字符」拼接到结果里,然后更新当前字符为新字符,计数重置为1
- 遍历结束后,别忘了把最后一组的「计数+字符」也拼到结果里(因为循环里只会在遇到不同字符时拼接,最后一组不会触发这个逻辑)
Python 代码实现
def run_length_encoding(s): if not s: # 处理空字符串的情况 return "" result = [] current_char = s[0] count = 1 for char in s[1:]: if char == current_char: count += 1 else: result.append(f"{count}{current_char}") current_char = char count = 1 # 处理最后一组未拼接的字符 result.append(f"{count}{current_char}") return ''.join(result) # 测试示例输入 input_str = "AABBBACCDA" print(run_length_encoding(input_str)) # 输出: 2A3B1A2C1D1A
代码细节说明
- 用列表
result来存储中间结果比直接字符串拼接效率更高(Python字符串是不可变类型,每次拼接都会生成新对象,列表的append操作开销更小) - 开头的空字符串判断很重要,能避免输入为空时触发
s[0]的索引错误 - 遍历结束后手动添加最后一组字符是最容易遗漏的点,一定要记得处理
如果用其他语言实现,逻辑也是完全一致的——无非是换一种遍历和字符串拼接的语法而已。
内容的提问来源于stack exchange,提问作者batman007
相关产品推荐
相关产品推荐

