首页 > 解决方案 > Python 连续字符

问题描述

如果给定一个字符串,则仅当字符连续重复超过 3 次时才用该字符重复的次数替换该字符,如下所示

输入:aaaa 输出:5Za

输入:addeeeeuyyyyy 输出:add4Zeu5Zy

尝试如下:

>>> from itertools import groupby
>>> strs="aaaaa"
>>> [[k, len(list(g))] for k, g in groupby(strs)]
[['a', 5]]
>>> 

标签: python-3.x

解决方案


你得到了很好的一部分 - 你需要实现仅缩写出现 4 次以上的连续字母的限制,并将其添加'Z'到输出中。

你可以这样做:

from itertools import groupby


def run_length_encode(data):
    result = []
    for letter,amount in ( (k, len(list(g))) for k, g in groupby(data)):
        result.append(letter*amount if amount < 4 else f'{amount}Z{letter}')

    return ''.join(result)

data = "someaaaaabbbcdccdd"  
print(data, run_length_encode(data), sep = "=>" ) 

输出:

someaaaaabbbcdccdd => some5Zabbbcdccdd

您可以在此相关帖子中找到更多解决方案(正则表达式 fe):


推荐阅读