挑战介绍
实现一个算法来压缩一个字符串。压缩的要求如下:
需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。
压缩的格式是将连续相同字符替换为字符+数字形式,例如 "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) 压缩后和原字符串的长度来确定是否需要压缩