LeetCode 443 壓縮字串

2021-09-29 21:58:59 字數 1561 閱讀 6813

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

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

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

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

示例 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」替代。

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

class

solution

:def

compress

(self, chars: list[

str])-

>

int:

i =0while i <

len(chars)

: num =

1for j, v in

enumerate

(chars[i+1:

], i+1)

:if v == chars[i]

: num +=

1elif num !=1:

chars[i+

1:j]

=str

(num)

i +=

2 num =

0break

else

: i +=

1 num =

0break

if num >1:

chars[i+1:

]=str(num)

break

elif num ==1:

break

return

len(chars)

執行用時 : 80ms

記憶體消耗 : 13.8mb

題後反思:

我使用的是切片賦值的方法來進行原地壓縮字串。

break不能漏,漏了可能就會出錯。

class solution 

for(j--

;j>=

0;j--)}

anchor = i +1;

}}return writer;}}

;

執行用時 : 16ms

記憶體消耗 : 9.2mb

題後反思:無

LeetCode 443 壓縮字串

給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?示例 1 輸入 a a b b c c c 輸出 返回6,輸入陣列的前6個...

leetcode 443 壓縮字串

題目描述 給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?示例 1 輸入 a a b b c c c 輸出 返回6,輸入陣...

LeetCode 443 壓縮字串

題目描述 給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度。高階 你能否僅使用o 1 空間解決問題?輸入示例1 輸入 a a b b c c c 輸出 返回6,輸入...