(python3)字符串压缩与解压
题⽬赘述:
本题需要你根据压缩或解压的要求,对给定字符串进⾏处理。这⾥我们简单地假设原始字符串是完全由英⽂字母和空格组成的⾮空字符串。输⼊格式:
输⼊第⼀⾏给出⼀个字符,如果是 C 就表⽰下⾯的字符串需要被压缩;如果是 D 就表⽰下⾯的字符串需要被解压。第⼆⾏给出需要被压缩或解压的不超过1000个字符的字符串,以回车结尾。题⽬保证字符重复个数在整型范围内,且输出⽂件不超过1MB。
输出格式:
根据要求压缩或解压字符串,并在⼀⾏中输出结果。
输⼊样例 1:
C
TTTTThhiiiis isssss a tesssst CAaaa as
输出样例 1:
5T2h4is i5s a3 te4st CA3a as
输⼊样例 2:
D
5T2h4is i5s a3 te4st CA3a as10Z
输出样例 2:
TTTTThhiiiis isssss a tesssst CAaaa asZZZZZZZZZZ
题⽬解析:
题⽬不难,对字符串的处理问题。⾸先⼀定是分两种情况。。
看如下解答,感觉可读性还不错。
压缩的思路是寻连续相同的字符,输出“计数”“字符”,计数为1时省略数字,重点是如何使遍历过程不重复、不遗漏,对于i 的操作尤为关键;
解压的思路是数字及其后的字符,没有数字直接copy,难点仍是遍历过程,且数字可能是⼀位数到三位数。
pro = input()
string = input()
n = len(string)
ans=""# 输出结果
if pro == "C": # 压缩
i = 0
while i < n: # 从i 开始寻连续相同的字符,计数为con
j = i+1
con = 1
while j < n and string[j]== string[i]:
con += 1
j += 1
if con == 1: # 计数为1 则直接加到ans
ans = ans + string[i]
else:
new = "%d%s" % (con, string[i])
ans = ans + new
i = j # i 定位到下⼀个字符
else: # 解压
i=0
while i < n:
j = i + 1
if string[i].isdigit(): # 从i 开始寻连续的数字字符,为数量num
while string[j].isdigit():
j+=1
字符串长度压缩num = int(string[i:j])
new = string[j] * num
ans = ans + new
i = j + 1
else: # 若i 不为数字,直接添加到ans
ans = ans + string[i]
i = j
print(ans)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论