题目来源于力扣:
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
#自己写的
class Solution:
def compressString(self, S: str) -> str:
s = ''
n1 = len(S)
k = 1
#针对字符串长度做判断
if n1 ==1 or n1 == 0:
return S
else:
for i in range(1,n1):
if S[i] == S[i-1]:
k = k+1
#考虑到字符串后两位相同的情况
if i == n1-1:
s = s + S[i-1] + str(k)
else:
s = s + S[i-1] + str(k)
k = 1
#考虑到字符串后两位相同的情况
if i == n1-1:
s = s + S[i] + str(1)
n2 = len(s)
if n1 > n2:
return s
else:
return S
这个题目我调试了两个小时,主要在于没有做好前期准备:划分边界,找不不同情况
下面方法是力扣大佬的解答,比我上面的简洁,聪明之处在于将字符串长度先扩展一位,从而不需要考虑字符串尾部边界的情况
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]