• 【leetcode】316. Remove Duplicate Letters


    题目如下:

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.

    Example 1:

    Input: "bcabc"
    Output: "abc"
    

    Example 2:

    Input: "cbacdcbc"
    Output: "acdb"

    解题思路:因为要求字典序最小,所以先从'a'开始,找出第一个出现的'a',如果在这个'a'后面其余的字符至少会出现一次,则表示满足条件;如果'a'不满足这个条件,则继续判断'b',直到找出第一个满足条件并且字典序最小的字符。找到这个字典序最小的字符(假设为i)后,那么表示这个'i'可以保留,'i'之前的所有字符以及'i'之后其他的'i'都删除掉,在剩下的字符串中又继续从'a'开始,找到满足条件的除i以为最小的字典序字符。一直循环,直到所有不同字符都找到一个满足这个条件的即可。

    代码如下:

    class Solution(object):
        def removeDuplicateLetters(self, s):
            """
            :type s: str
            :rtype: str
            """
            dic = {}
            for i,v in enumerate(s):
                dic[v] = dic.setdefault(v,[]) + [i]
            res = ''
            origin_len = len(dic)
    
            while len(res) < origin_len:
                #print dic
                for (char) in range(ord('a'),ord('a')+26):
                    char = chr(char)
                    if char not in dic:
                        continue
                    flag = True
                    for key in dic.iterkeys():
                        if char == key:
                            continue
                        elif dic[char][0] > dic[key][-1]:
                            flag = False
                            break
                    if flag:
                        res += char
                        inx = dic[char][0]
                        del dic[char]
    
                        import bisect
                        for key in dic.iterkeys():
                            del_inx = bisect.bisect_left(dic[key],inx)
                            dic[key] = dic[key][del_inx:]
                        break
            return res
  • 相关阅读:
    证明最大公约数Stein算法(高精度算法)
    链表常用内容和易犯错误
    斐波那契数列——各种公式证明
    用矩阵和待定系数法求数列的分析(复杂度log(n))
    盒模型(外边距)
    盒子模型(内边距)
    盒子模型(边框)
    jupyterhub
    1分钟k线图能反映什么?(转)
    python的self
  • 原文地址:https://www.cnblogs.com/seyjs/p/10496058.html
Copyright © 2020-2023  润新知