题目
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:“aabcccccaaa”
输出:“a2b1c5a3”
示例2:
输入:“abbccd”
输出:“abbccd”
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。
解题思路
- 字符串作为输入参数,需要首先判断字符串是否为空字符串;
- 创建新的空字符串new_str作为压缩后的字符串返回;
- 用char表示比较字符,其初始值为字符串的起始字符;
- 用times表示比较字符的重复次数,当遍历原字符串时,某个字符等于比较字,则times = times + 1;
- 当到了某个字符不等于比较字符时,把比较字符和其对应的重复次数写进新字符串new_str中,此时再把这个字符赋值给比较字符char,进行下一个字符的比较,重复次数times赋值为1;
- 当遍历进行到最后一个字符时,把此时的比较字符和对应的重复次数写进new_str中;
- 最后根据题目要求将新字符串的长度和原字符串的长度比较,返回结果。
代码提交
class Solution(object):
def compressString(self, string):
"""
:type S: str
:rtype: str
"""
new_str = ''
times = 0
if string == '':
return string
else:
char = string[0]
for i in range(len(string)):
if string[i] == char:
times += 1
else:
new_str = new_str + char + str(times)
char = string[i]
times = 1
if i == len(string) - 1:
new_str = new_str + char + str(times)
if len(new_str) < len(string):
return new_str
else:
return string
执行用时 :204 ms, 在所有 Python 提交中击败了28.05%的用户
内存消耗 :15.3 MB, 在所有 Python 提交中击败了100.00%的用户
拓展:字符串函数str.join()
1、虽然字符串和列表都可迭代类型,不过字符串没有函数像list.append()
那样可以直接在字符串后面加入元素。其实字符串在后面加入元素更简单,只需要做加法就好。
实例:
str1 = "my name is "
str2 = "Jerry"
string = str1 + str2
print(string)
输出:
my name is Jerry
2、字符串有个和list.append()
看起来相似,实则不一样的函数str.join()
。
语法:
str.join(sequence)
参数:
- sequence – 要连接的元素序列。
返回:
返回通过指定字符连接序列中元素后生成的新字符串。
实例:
str1 = '-'
seq = ['J','e','r','r','y']
print(str1.join(seq))
输出:
J-e-r-r-y