LeetCode 443 壓縮字串 未看

2022-09-22 06:02:08 字數 2184 閱讀 5302

問題描述:

給定一組字元,使用原地演算法將其壓縮。

壓縮後的長度必須始終小於或等於原陣列長度。

陣列的每個元素應該是長度為1 的字元(不是 int 整數型別)。

在完成原地修改輸入陣列後,返回陣列的新長度。

進階:

你能否僅使用o(1) 空間解決問題?

示例 1:

輸入:["a","a","b","b","c","c","c"]輸出:返回6,輸入陣列的前6個字元應該是:["a","2","b","2","c","3"]說明:"aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。
示例 2:

輸入:["a"]輸出:返回1,輸入陣列的前1個字元應該是:["a"]說明:沒有任何字串被替代。
示例 3:

輸入:["a","b","b","b","b","b","b","b","b","b","b","b","b"]輸出:返回4,輸入陣列的前4個字元應該是:["a","b","1","2"]。說明:由於字元"a"不重複,所以不會被壓縮。"bbbbbbbbbbbb"被“b12”替代。

注意每個數字在陣列中都有它自己的位置。

注意:所有字元都有一個ascii值在[35, 126]區間內。

1 <= len(chars) <= 1000

方法:leetcode編譯器抽風了?為什麼在jupyter上可以,在lee就不行???

1

class

solution(object):

2def

compress(self, chars):

3"""

4:type chars: list[str]

5:rtype: int

6"""

7if len(set(chars)) ==len(chars):

8return

len(chars)

9chars.sort()

10 i=0

11while i

12 count_i =chars.count(chars[i])

13if count_i> 1:

14 chars = chars[0:i+1]+list(str(count_i))+chars[i+count_i:]

15 i += 2

16else

:17 i += 1

18return len(chars)

官方:

1

class

solution:

2def

compress(self, chars):

3"""

4:type chars: list[str]

5:rtype: int

6"""

8 last=chars[0]

9 count,p=1,0

10for i,c in enumerate(chars[1:]):

11if c==last:

12 count+=1

13else:14

for j in last+(str(count) if count>1 else

''):

15 chars[p]=j

16 p+=1

17 count=1

18 last=c

19return p

2018-10-04 20:20:34