給定一組字元,使用原地演算法將其壓縮。
壓縮後的長度必須始終小於或等於原陣列長度。
陣列的每個元素應該是長度為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,輸入...