一道关于字符串压缩的面试题

题目

编写一个算法,实现基本的字符串“压缩”算法,比如对于字符串'abbbbffcccdddcc',经过算法处理之后得到的输出为'a1b4f2c3d3c2',如果处理后的字符串长度不小于原串长度,则返回原串。

算法

算法一

def str_compress(string):
    result = []
    current = string[0]
    count = 1
    for s in string[1:]:
        if s == current:
            count += 1
        else:
#             result += current + str(count)
            result.append(current)
            result.append(str(count))
            current = s
            count = 1
#     result += current + str(count)
    result.append(current)
    result.append(str(count))
#     return result
    return ''.join(result)

s = 'abbbbffcccdddcc'
print(str_compress(s))
a1b4f2c3d3c2

算法二

# 使用itertools模块的groupby方法
from itertools import groupby

def str_compress2(string):
    result = []
    for key, group in groupby(string):
        result.append(key)
        result.append(str(len(list(group))))
    return ''.join(result)

s = 'abbbbffcccdddcc'
print(str_compress2(s))
a1b4f2c3d3c2

更多groupby及itertools模块的用法请参考:

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001415616001996f6b32d80b6454caca3d33c965a07611f000

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容