zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    Android Touch事件的分发过程
    使用runOnUiThread更新UI
    Sqlite访问数据库很慢的问题
    资源收集
    mongdb shard集群均衡导致宿主机CPU飙到100%处理
    Harbor安装
    springboot 启动脚本获取pid问题
    androidstudio build 时间太长处理
    修改 Docker 的 daemon.json后启动失败
    关于在centos7 64为引用android so引发的问题修复
  • 原文地址:https://www.cnblogs.com/seyjs/p/10496058.html
Copyright © 2011-2022 走看看