python百题大冲关-压缩字符串

DaLongggggg 等级 89 0 0

挑战介绍

实现一个算法来压缩一个字符串。压缩的要求如下:

需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
压缩的格式是将连续相同字符替换为字符+数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"。

本次挑战中,你需要在 compress_str.py 文件中补充函数 compress 的空缺部分。

compress 函数接受一个参数,string 用于指定传入的字符串;
compress 函数输出一个字符串。

你需要补充 compress 函数,使 compress 函数可以对传入的 string 字符串进行压缩。要求如下:

判断传入的字符串是否需要进行压缩,如果不需要压缩,返回原字符串;
如果需要压缩,返回压缩后的字符串;
如果传入的字符串是 None 或者空字符串,返回 None 或者空字符串。
class CompressString(object):

    def compress(self, string):
        if string is None or not string:
            return string
        result = ''
        prev_char = string[0]
        count = 0
        for char in string:
            if char == prev_char:
                count += 1
            else:
                result += self._calc_partial_result(prev_char, count)
                prev_char = char
                count = 1
        result += self._calc_partial_result(prev_char, count)
        return result if len(result) < len(string) else string

    def _calc_partial_result(self, prev_char, count):
        return prev_char + (str(count) if count > 1 else '')

string is None or not string 依旧判断是否为空

判断是否需要压缩 先定义一个prev_char赋值string第一个字符 通过循环对比string里的字符 判断char等于string[0]来计数 每一个相等 count+1
当不相等遇到下一个字符时便调用_calc_partial_result函数来返回之前压缩的值 比如aaaaa压缩成a5

下一个字符便重复之前的循环

最后通过对比len(result) < len(string) 压缩后和原字符串的长度来确定是否需要压缩

预览图
收藏
评论区