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

如何用Python实现固定块长k的类正则式游程编码?

基于分块长度k的字符串游程编码实现

需求说明

将字符串按长度为k的块进行游程编码,生成类正则式的摘要:连续重复的块以(块内容)重复次数的格式表示,非重复块或剩余不足k长度的部分直接保留。

示例

输入字符串:TATTTTATTTTATTTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTACATTATTTTA
分块长度k=5
输出结果:(TATTT)3(TATGT)9TACATTATTTTA

Python代码实现

def run_length_encode(s, k):
    if k <= 0:
        raise ValueError("分块长度k必须大于0")
    if not s:
        return ""
    
    result = []
    total_length = len(s)
    current_idx = 0
    
    while current_idx <= total_length - k:
        current_block = s[current_idx:current_idx + k]
        repeat_count = 1
        
        # 统计连续重复的同一块
        while (current_idx + k <= total_length - k) and (s[current_idx + k:current_idx + 2*k] == current_block):
            repeat_count += 1
            current_idx += k
        
        # 按规则添加到结果
        if repeat_count > 1:
            result.append(f"({current_block}){repeat_count}")
        else:
            result.append(current_block)
        
        current_idx += k
    
    # 处理末尾不足k长度的剩余字符
    if current_idx < total_length:
        result.append(s[current_idx:])
    
    return ''.join(result)

# 测试示例
test_str = "TATTTTATTTTATTTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTATGTTACATTATTTTA"
k_value = 5
print(run_length_encode(test_str, k_value))

代码逻辑说明

  • 合法性校验:先判断k是否大于0,空字符串直接返回空结果
  • 遍历分块:从字符串起始位置开始,每次截取长度为k的块,统计连续重复的次数
  • 结果构建:重复次数大于1时使用压缩格式,否则直接保留块内容
  • 剩余处理:字符串末尾不足k长度的部分直接追加到结果中

内容的提问来源于stack exchange,提问作者Wouter De Coster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:12:45