給定一個字符串 s 以及一個數字 k ,把所有連續 k 次的字母串移除,回傳最後剩下的字符串
這題一樣透過 stack 可以用較少的時間複雜度完成,在遍歷整個字符串的過程中,只需比較當下的字符串以及 stack 中最上層的 字符串 pair 即可
stack
是空的或是 stack[-1][0]
時候,直接 append [c, 1]
到 stack 中stack[-1][0]
的字母與當前遍歷到的字母相等時,將 stack[-1][1] + 1當 stack[-1][1] 與 k 相等時,將其 pop 出來,代表這個值從 stack 中 remove 掉
最後,stack 就會是連續重複小於 k 次的字母
class Solution:
def removeDuplicates(self, s: str, k: int) -> str:
stack = [] # char count
for c in s:
if stack and stack[-1][0] == c:
stack[-1][1] += 1
else:
stack.append([c,1])
if stack[-1][1] == k:
stack.pop()
res = ''
for c_pair in stack:
res += c_pair[0] * c_pair[1]
return res