iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Software Development

Leetcode 習慣養成之路系列 第 30

Day 30 - 1209. Remove All Adjacent Duplicates in String II

  • 分享至 

  • xImage
  •  

題目說明

給定一個字符串 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


上一篇
Day 29 - 1472. Design Browser History
系列文
Leetcode 習慣養成之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言