8.17 - hard - 63

316. Remove Duplicate Letters

一道greedy的题目,也不是很难想,就是挨个挨个朝stack里放,因为要维持一定的顺序,所以用stack比较合适

class Solution(object):
    def removeDuplicateLetters(self, s):
        """
        :type s: str
        :rtype: str
        """
        stack = []
        h = {}
        for c in s:
            if c in h:
                h[c] += 1
            else:
                h[c] = 1
        
        for c in s:
            if c in stack:
                h[c] -= 1
                continue
            while stack and stack[-1] >= c and h[stack[-1]] > 1:
                val = stack.pop()
                h[val] -= 1
            stack.append(c)

        return "".join(stack)

你可能感兴趣的:(8.17 - hard - 63)