字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
代码一:
class Solution:
def compressString(self, S: str) -> str:
ans = " "
S += " "
count = 1
for i in range(1, len(S)):
if S[i] != S[i-1]:
ans += S[i-1] + str(count)
count = 1
else:
count += 1
return ans if len(ans) < len(S)-1 else S[:-1]
作者:theBestOne
链接:https://leetcode-cn.com/problems/compress-string-lcci/solution/javaliang-chong-jie-fa-onfu-za-du-by-thebestone/
如示例一中,aabcccccaaa,首先count=1,i为[1,2,3,4,5,6,7,8,9,10,11],第一次循环中,判断S[1]是否等于S[0],此处为等于,count自加1,第二次判断S[2]是否等于S[1],此处为不等于,则ans等于(S[0]也就是a)加上 输出为字符串的count,并使count恢复为1。循环结束后判断长度。
代码二:
class Solution:
def compressString(self, S: str) -> str:
if len(S)==0 :
return ""
ans = ""
prev = S[0]
num = 0
for i in range(len(S)):
if S[i] == prev:
num += 1
else:
ans += (prev + str(num))
num = 1
prev = S[i]
ans += (prev + str(num))
if len(ans) >= len(S):
return S
else:
return ans
作者:clay001
链接:https://leetcode-cn.com/problems/compress-string-lcci/solution/jian-dan-luo-ji-pan-duan-by-clay001/
循环方式相同。多了一个判断初始字符串是否为0