Python實現資料結構與演算法 字串壓縮

2021-10-03 22:42:11 字數 1719 閱讀 2383

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

示例1:

輸入:"aabcccccaaa"

輸出:"a2b1c5a3"

示例2:
輸入:"abbccd"

輸出:"abbccd"

解釋:"abbccd"壓縮後為"a1b2c2d1",比原字串長度更長。

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

核心思想就是按順序記錄每乙個字元出現的個數。

遍歷字串,ch記錄當前比較的字元

c為當前遍歷的字元

如果ch==c,則計數加1

如果ch!=c,則ch=c,ans += ch+str(count)

**如下:

class

solution

:def

compressstring

(self, s:

str)

->

str:

ifnot s:

return

"" ans =

'' ch = s[0]

cnt =

0for c in s:

if ch == c:

cnt +=

1else

: ans = ans + ch +

str(cnt)

ch = c

cnt =

1 ans = ans + ch +

str(cnt)

return ans if

len(ans)

<

len(s)

else s

這個思路和官方的一模一樣,**也和官方基本相同,但是速度卻有很大不同,官方**如下:

class

solution

:def

compressstring

(self, s:

str)

->

str:

ifnot s:

return

"" ch = s[0]

ans =

'' cnt =

0for c in s:

if c == ch:

cnt +=

1else

: ans += ch +

str(cnt)

ch = c

cnt =

1 ans += ch +

str(cnt)

return ans if

len(ans)

<

len(s)

else s

測試結果:

這裡的區別在於官方題解中,把 ans = ans + ch + str(cnt)寫成了 ans += ch + str(cnt)。這麼乙個小的改動,速度提公升了很大。值得注意。

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...