給定一組字元,使用原地演算法將其壓縮。
壓縮後的長度必須始終小於或等於原陣列長度。
陣列的每個元素應該是長度為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。
*
/c++
class
solution
return cur;}}
;class
solution
} cnt =0;
}}return len;}}
;*/python 解法
class
solution
: def compress
(self, chars: list[str])-
>
int:
cur =
0 i,j=0,
0 n =
len(chars)
while i < n :
while
(j < n)
and(chars[j]
== chars[i]):
j = j +
1 chars[cur]
= chars[i]
cur = cur +
1if j-i ==1:
i = j
continue
for c in str
(j-i)
: chars[cur]
=c cur = cur +
1 i=j
return cur
*/class
solution
: def compress
(self,chars:list[str])-
>
int:
count =
1 length =
len(chars)
for index in range
(length-1,
-1,-
1):if index >
0and chars[index]
== chars[index-1]
: count +=1
else
: end = index+count
chars[index:end]
=[chars[index]
]if count ==
1else
[chars[index]]+
list
(str
(count)
) count =
1return
len(chars)*/
class
solution
: def compress
(self,chars:list[str])-
>
int:
p=0 w=
0 count=
1while p<
len(chars)
:if p==
len(chars)-1
or chars[p]
!= chars[p+1]
:if count!=1:
s = chars[p]
+str
(count)
else
: s = chars[p]
for i in s:
chars[w]
= i w +=1
count=
1else
: count +=1
p +=1
return w
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,輸入...