leetcode——316. 去除重复字母

这道题也不是我自己想出来的。。。

class Solution(object):
    def removeDuplicateLetters(self, s):
        """
        :type s: str
        :rtype: str
        """
        counts = {}
        coun=set(s)
        for c in coun:
            counts[c]=s.count(c)

        stack, stacked = ['0'], set()   # stack为答案,放置哨兵,stacked为stack中已有的字符
        for c in s:
            if c not in stacked:
                while c < stack[-1] and counts[stack[-1]]:  # 当栈顶在后面还有且大于当前字符时弹出
                    stacked.remove(stack.pop())
                stack.append(c)
                stacked.add(c)
            counts[c] -= 1
        return ''.join(stack[1:])
执行用时 :32 ms, 在所有 python 提交中击败了62.20%的用户 内存消耗 :11.7 MB, 在所有 python 提交中击败了44.44%的用户     ——2019.11.4
上一篇:Codeforces Round #316 (Div. 2) D计算在一棵子树内某高度的节点


下一篇:爬虫神器xpath的用法(三)