leetcode——316. 去除重复字母

Posted 欣姐姐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于leetcode——316. 去除重复字母的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0316. 去除重复字母:单调栈

316. 去除重复字母

2021-08-31:去除重复字母。给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。力扣316。

leetcode 316 Remove Duplicate Letters

LeetCode——不同字符的最小子序列/去除重复字母

LeetCode 316. Remove Duplicate Letters(贪心)