题目赘述:git
本题须要你根据压缩或解压的要求,对给定字符串进行处理。这里咱们简单地假设原始字符串是彻底由英文字母和空格组成的非空字符串。spa
输入格式:code
输入第一行给出一个字符,若是是 C 就表示下面的字符串须要被压缩;若是是 D 就表示下面的字符串须要被解压。第二行给出须要被压缩或解压的不超过1000个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过1MB。blog
输出格式:字符串
根据要求压缩或解压字符串,并在一行中输出结果。input
输入样例 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
题目解析:string
题目不难,对字符串的处理问题。首先必定是分两种状况。。it
看以下解答,感受可读性还不错。class
压缩的思路是寻找连续相同的字符,输出“计数”“字符”,计数为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)