Leetcode 443 壓縮字串

2021-10-03 02:55:29 字數 2007 閱讀 1191

這個題目因為要求打到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,輸入...