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

基于游程编码(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:27:56