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

DaLongggggg
• 阅读 1266

挑战介绍

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

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

点赞
收藏
评论区
推荐文章
DaLongggggg DaLongggggg
3年前
python百题大冲关-反转字符串中的字符
挑战介绍实现一个算法来实现反转字符数组的功能。反转的要求如下:将字符数组的字符进行反转,例如'b','','a','r'变成'r','a','','b'。将字符数组替换为反转后的数组。本次挑战中,你需要在reverse_chars.py文件中补充函数reverse的空缺部分。re
Karen110 Karen110
2年前
手把手教你用Python实现批量文件的压缩处理
一、前言大家好,我是崔艳飞。接到项目求助,需要对上千个文件夹中的文件进行压缩处理,并要删除源文件,只保留压缩后的压缩文件,数据量大,手动完成耗时耗力,用Python处理再合适不过了。二、项目目标批量对文件夹的内容进行压缩处理,满足客户要求。三、项目准备软件:PyCharm需要的库:os,shutil,zipfile四、项目分析1)如何读取源文
DaLongggggg DaLongggggg
3年前
python百题大冲关-确定字符串是否是另一个的排列
挑战介绍实现一个算法来识别一个字符串str2是否是另一个字符串str1的排列。排列的解释如下:如果将str1的字符拆分开,重新排列后再拼接起来,能够得到str2,那么就说字符串str2是字符串str1的排列。本次挑战中,你需要在permutation.py文件中补充函数is_permutation的空缺部分
DaLongggggg DaLongggggg
3年前
python百题大冲关-找到给定字符串中的不同字符
请大佬指正纠错!!!!挑战介绍在不考虑字符排列的条件下,对于相差只有一个字符的两个字符串,实现一个算法来识别相差的那个字符。要求如下:当传入的字符串为'aad'和'ad'时,结果为'a'。当传入的字符串为'aaabccdd'和'abdcacade'时,结果为'e'本次挑战中,你需要在diff.py文件
DaLongggggg DaLongggggg
3年前
python百题大冲关-确定字符串是否是另一个的旋转
挑战介绍实现一个算法来识别一个字符串s2是否是另一个字符串s1的旋转。旋转的解释如下:如果将s1从某个位置断开,拆分成两个字符串(可能有一个为空字符串),再将这两个字符串调换顺序后拼接起来,能够得到s2,那么说字符串s2是字符串s1的旋转。本次挑战中,你需要在rotation.py文件中补充函数is_subst
Stella981 Stella981
2年前
Linux递归压缩图片脚本
1压缩图片使用ImageMagick的convert命令进行压缩图片,一般只需要一个指定压缩质量的参数,比如:convertquality751.jpg1_compress.jpg可以支持压缩jpg/png/jpeg。2递归压缩递归压缩使用find配合g
Wesley13 Wesley13
2年前
linux常见压缩格式及deb安装包用法
ZIP格式评价:可能是目前使用的最多的文档压缩格式,跨平台。压缩率不高。压缩一个目录:\ziprarchive\_name.zipdirectory\_to\_compress解压缩:\unziparchive\_name.zipTAR格式评价:消耗cpu及时间少,仅仅是一个打包工具,并不负责压缩。
Wesley13 Wesley13
2年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
2年前
Linux基础学习笔记——压缩和解压(tar、zip)
压缩和解压缩Linux默认支持的压缩格式:gz、bz2、zip压缩目的:节省磁盘空间扩展:1.压缩文件尽量使用gz,因为占用空间较少,效率高;2.bz2压缩后的文件占用空间最小;3.zip压缩的文件占用空
Wesley13 Wesley13
2年前
MySQL之索引(四)
压缩索引MyISAM使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,这在某些情况下能极大地提高性能。默认只压缩字符串,但通过参数设置也可以对整数做压缩。MyISAM压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其他值和第一个值进行比较得到相同前缀的字节数和剩余的不同后缀部分,把这部分存储起来即可。例如,索引块中的第