美文网首页
去除重复字母

去除重复字母

作者: 小幸运Q | 来源:发表于2021-04-20 10:29 被阅读0次

image.png

要求一、要去重。

要求二、去重字符串中的字符顺序不能打乱 s 中字符出现的相对顺序。

要求三、在所有符合上一条要求的去重字符串中,字典序最小的作为最终结果。

有序需要依赖单调栈,最佳的情况是小的放前面打的放后面,这可以依赖单调栈,但是如果大的在pop之后后继无人的话还是得保留,所以作为特例处理(此时为最大数的最低位所以还是最优解)。

  • 记住先判断是否已选,已选之后才是while...pop

res计算i位之后的各个字符出现的次数,choose记录栈里面已经选了哪些字符。对于已选字符不入栈但是要修改res。

class Solution:
    def removeDuplicateLetters(self, s: str) -> str:
        if s=="":
            return s
        # 剩余计数器
        res={}
        # 已选记录
        choose={}
        for i in s:
            if i in res:
                res[i]+=1
            else:
                res[i]=1
            choose[i]=0
        stack=[s[0]]
        res[s[0]]-=1
        choose[s[0]]=1
        for i in range(1,len(s)):
            res[s[i]]-=1
            if s[i] not in stack:
                while len(stack)>0 and ((stack[-1]>s[i] and res[stack[-1]]>0)):
                    t=stack.pop()
                    choose[t]=0
                if choose[s[i]]==0:
                    stack.append(s[i])
                    choose[s[i]]=1
        return "".join(stack)

相关文章

  • 去除重复字母

    题目:去除重复字母(LeetCode-困难)给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字...

  • 去除重复字母

    要求一、要去重。 要求二、去重字符串中的字符顺序不能打乱 s 中字符出现的相对顺序。 要求三、在所有符合上一条要求...

  • 数据结构与算法09-字符串去重

    题目: • 去除重复字母(LeetCode-困难)给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得...

  • 数据结构与算法-去除重复字符串,保持字典序最小

    题目: 去除重复字母(LeetCode-困难) 给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每...

  • 316. 去除重复字母

    题目 316. 去除重复字母 给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保...

  • 栈思想的应用2

    一、字符串编码 二、去除重复字母

  • 数据结构与算法 练习(八)

    去除重复字母 给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的...

  • 算法—去除重复字母

    给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要...

  • 去除重复字母问题

    给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要...

  • 316. 去除重复字母

    316. 去除重复字母[https://leetcode-cn.com/problems/remove-dupli...

网友评论

      本文标题:去除重复字母

      本文链接:https://www.haomeiwen.com/subject/wovwlltx.html