件名の説明:
列圧縮。基本的な文字列の圧縮を達成するための方法で書かれた定期的な文字の数を、使用します。例えば、文字列aabcccccaaaはa2b1c5a3になります。文字列は短くない「圧縮」した場合、元の文字列が返されます。あなたは、文字列のみ小文字(a〜z)のが含まれているとことがあります。
例1:
输入:"aabcccccaaa"
输出:"a2b1c5a3"
例2:
输入:"abbccd"
输出:"abbccd"
彼は説明する:「abbccd」「a1b2c2d1」として圧縮、文字列の長さがオリジナルよりも長いです。
ヒント:範囲内の文字列の長さ[0、50000]。
1問題解決のアイデア:
- 同じ文字が表示された回数をカウントします。
- 文字の後に重い文字に隣接統計
- 一覧デジタルキャラクターと一緒に、その後、これを文字列に変換されます
コード1:
class Solution(object):
def compressString(self, S):
if len(S) == 0: # 当 S = ""时
return S
j = 0
countj = 1
temp = []
temp2 = []
for i in range(len(S)-1):
if S[i] == S[i+1]:
countj += 1
else:
temp.append(countj)
j += 1
countj = 1
temp.append(countj) # 依次统计相同字符出现的次数
k = 0
for i in range(len(S)-1):
if S[i] != S[i+1]:
k = i+1
temp2.append(S[i])
temp2.append(S[k]) # 依次去重相邻字符
temp3 = []
for i in range(len(temp)):
temp3.append(temp2[i]+str(temp[i]))
temp3 = ''.join(list(temp3)) # 将列表转换为字符串
return temp3 if len(temp3) < len(S) else S
s = Solution()
S = "aabcccccaaa"
print(s.compressString(S))
2問題解決のアイデア:
同じ文字列の圧縮方法は+が表示される連続した文字の回数を圧縮することです。圧縮短い後の文字列の長さは、圧縮された文字列が返された場合、我々は、文字列を構築するプロセスをシミュレートすることができますので、それ以外の場合は、元の文字列を保持します。
コード2:
投稿者:滞在ボタンの公式サイト
class Solution:
def compressString(self, S: str) -> str:
if not S:
return ""
ch = S[0]
ans = ''
cnt = 0
for c in S:
if c == ch:
cnt += 1
else:
ans += ch + str(cnt)
ch = c
cnt = 1
ans += ch + str(cnt)
return ans if len(ans) < len(S) else S
s = Solution()
S = "aabcccccaaa"
print(s.compressString(S))
タイトル出典:
インタビューの質問01.06列圧縮。