這個題目因為要求打到o(1)的複雜度,所以不能開陣列,要在原有陣列的基礎上進行修改,然後返回新陣列的長,leetcode會自動根據這個長度截出修改過的陣列頭部,與自己的測試用例進行對比看是否正確。
舉個例子
chars=[「a」,「a」,「b」,「b」,「c」,「c」,「c」]
#壓縮後得
chars=[「a」,「2」,「b」,「2」,「c」,「3」,「c」]
#可知chars前六位遭到修改,所以函式應返回6,leetcode後台會自動擷取chars前六位,得到壓縮體,然後進行校驗。
**例項
#
## [443] 壓縮字串
## @lc code=start
class
solution
:def
compress
(self, chars: list[
str])-
>
int:
iflen
(chars)==1
:#如果陣列長度為1,可知長度為1,直接返回
return
1 flag=chars[0]
#初始化標誌位
counts=
0#大計數器,計總長
count=
0#小計數器,計算相同連續字元長度
last_count=
0#count是臨時變數,且最後一輪迴圈得不到結果,用頂級變數last_count承接count進行最後運算
for i in chars:
#進入迴圈
if i != flag:
#如果當前字元不等於標誌字元可知出現了新字元
flag_copy=flag#將標誌字元賦給臨時變數flag_copy
flag=i#更新標誌字元
list_count=
list
(str
(count)
)#將小計數器字串化然後列表化
if count!=1:
#如果count不等於1,那麼上一步形成的列表要追加到chars中
chars[counts]
=flag_copy#將上一輪迴圈的標誌字元賦值到chars
for j in list_count:
#將count拆散成字元複製到chars
counts+=
1 chars[counts]
=j counts+=
1#大計數器前移
count=
1#小計數器前移
else
:#如果count等於1,則不用將其賦值到chars中,只追加上一輪迴圈的標誌字元
chars[counts]
=flag_copy
counts+=
1#大計數器前移
count=
1#小計數器前移
else
:#如果當前字元等於標誌位字元,小計數器增長
count+=
1 last_count=count#將最後一輪的小計數器值儲存下來,為最後一輪壓縮做準備
#開始最後一輪壓縮
list_count=
list
(str
(last_count)
)if last_count!=1:
chars[counts]
=flag
for j in list_count:
counts+=
1 chars[counts]
=j counts+=
1else
: chars[counts]
=flag
counts+=
1return counts#大計數器的值就是壓縮部分的長
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,輸入...