【Leetcode每日一題】316. 去除重複字母(棧,貪心)

YancyKahn發表於2020-12-20

Leetcode 每日一題
題目連結: 316. 去除重複字母
難度: 中等
解題思路: 每次當前的字元是否是小於棧頂元素的,若不小於將其pop。還需要記錄某個字元是否已經在棧中出現,若已經出現過則不用在進行比較。
題解:

class Solution:
    def removeDuplicateLetters(self, s: str) -> str:
        
        count = collections.Counter(s)
        visit = set()
        stack = list()
        
        for ch in s:
            if ch not in visit:
                while len(stack) > 0 and ch < stack[-1]:
                    if count[stack[-1]] > 0:
                        visit.remove(stack[-1])
                        stack.pop(-1)

                    else:
                        break
                visit.add(ch)
                stack.append(ch)
            count[ch] -= 1
        
        return "".join(stack)
                

相關文章