3種解法 實現字串壓縮

2021-10-03 22:44:14 字數 2279 閱讀 1909

字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若「壓縮」後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文本母(a至z)。

示例1:

輸入:「aabcccccaaa」

輸出:「a2b1c5a3」

示例2:

字串長度在[0, 50000]範圍內。

記錄首個字元,使用列表儲存每次拼接的壓縮字元

對當前字元判斷,如果跟之前相同就計數,否則重新記錄字元

將最後乙個字元加入list

class

solution

:def

compressstring

(self, s:

str)

->

str:

iflen

(s)==0:

return s

tmpchar = s[0]

tmpcount =

0 strlen =

0 l =

list()

for item in s:

if item == tmpchar:

tmpcount +=

1else

:'{}{}'

.format

(tmpchar,tmpcount)

) tmpchar = item

tmpcount =

1 strlen +=

len(

str(tmpcount))+

1#最後乙個字元

'{}{}'

.format

(tmpchar,tmpcount)

) strlen +=

len(

str(tmpcount))+

1 result = s

if strlen <

len(s)

: result =

''.join(l)

return result

思路:跟解法一思路類似,做法上通過兩個指標實現,慢指標始終指向字元開始位置,快指標指向相同字元的結束位置。

使用開始索引定位當前字元,一直訪問字串,直到開始位置到達字串結尾

結束索引先到達字串結尾時,由於開頭字元還未到達,因此會進入else模組進行拼接

class

solution

:def

compressstring

(self, s:

str)

->

str:

start, end, slen =0,

0,len(s)

result =

"" tmpcount =

0while start < slen:

if end== s[end]

: tmpcount +=

1 end +=

1else

: result +=

'{}{}'

.format

(s[start]

,tmpcount)

start = end

tmpcount =

0return result if

len(result)

<

len(s)

else s

思路:利用python自身的庫函式itertools.groupby進行字串歸類和統計

使用庫函式獲取字串

使用三元運算返回結果

class

solution

:def

compressstring

(self, s:

str)

->

str:

sresult =

''.join(

[item+

str(

len(

list

(itemstr)))

for item,itemstr in itertools.groupby(s)])

return sresult if

len(sresult)

<

len(s)

else s

字串 字串壓縮

標題 字串壓縮 類別字串處理 時間限制 1s記憶體限制 1000kb 問題描述 有一種簡單的字串壓縮演算法,對於字串中連續出現的同乙個英文本元,用該字元加上連續出現的次數來表示 連續出現次數小於3時不壓縮 例如,字串aaaaabbbabaaaaaaaaaaaaabbbb可壓縮為a5b3aba13b4...

實現 strStr 字串匹配的三種解法

題目描述 實現 strstr 函式。給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 hays...

字串壓縮

include using namespace std 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1.僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcb...