字串 去掉字串中連續出現k個0的子串

2021-08-21 15:52:15 字數 1404 閱讀 3789

【題目】

給定乙個字串str和乙個整數k,如果str中剛好有連續的k個『0』字元出現時,把k個連續的『0』字元刪除,返回處理後的字串。

【舉例】

str = 「a00b」,k = 2,返回 「ab」。 

str = 「a0000b000」,k = 3,返回 「a0000b」。

【基本思路】

使用兩個變數count和start。count表示目前出現的連續『0』的個數,start表示連續個『0』出現的開始的位置。初始時,count = 0,start = -1。

從左到右依次遍歷str,假設遍歷到i的位置的字元為char,情況分析如下:

1)如果char是字元『0』,此時更新start的值,如果start = -1 ,說明之前沒處在發現連續的 『0』的階段,那麼令start = i,否則start不變。同時令count加1。

2)如果char不是字元『0』,此時為去掉連續 『0』的階段。首先看此時count的值是否等於k,如果等於的話,說明之前出現的字元 『0』的個數正好為k,刪除這些連續的 『0』;如果不等於的話,不必刪除。最後令count = 0,start = -1。

3)既然把去掉 『0』的時機放在了char不是字元 『0』的時候,那麼str如果以k個 『0』結尾的話,這個連續的 『0』就不會刪除,所以在最後要再次判斷一下count。

時間複雜度o(n),空間複雜度o(1)

def removekzeros(str1,k):

if str1 == none or k <1 :

return str1

count = 0 #0的計數

start = -1 #0出現的起始位置

chas = list(str1) #列表化

for i in range(len(chas)):

if chas[i] == '0':

count += 1

start = i if start == -1 else start

else:

if count == k:

while count > 0: #重置

chas[start] = ""

start += 1

count -= 1

count = 0 #重新賦值

start = -1

if count == k: #防止結尾出現k個0

while count > 0:

chas[start] = ""

start += 1

count -= 1

return ''.join(chas) #轉化為字串方法:str.join(元組、列表、字典、字串) 之後生成的只能是字串

去掉字串中連續出現k個0的字串

給定乙個字串s和乙個整數k,如果s中正好有連續的k個 0 字元出現,把k個 0 字元去掉,返回處理後的字串。如s a00b k 2,返回 ab s a0000b000 k 3,返回 a0000b 維護乙個計數count,表示找到幾個連續的 0 維護找到的第乙個 0 的位置start,遍歷字串,過程中...

字串問題 去掉字串中連續出現k個0的子串

題目 給定乙個字串str和乙個整數k,如果str中剛好有連續的k個 0 字元出現時,把k個連續的 0 字元刪除,返回處理後的字串。舉例 str a00b k 2,返回 ab str a0000b000 k 3,返回 a0000b 基本思路 使用兩個變數count和start。count表示目前出現的...

字串問題 去掉字串中連續出現K個0的子串

給定乙個字串str,和乙個整數k,如果str中正好有連續k 個 0 字元出現,把連續的 k 個 0 去掉,返回處理後的子串。解題思路 1.定義兩個變數,count表示 0 連續出現的次數,start表示連續出現的開始位置,2.將去掉連續0 的時機放在了當前字元不是 0 的情況 3.因此對於最後可能以...