【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
【leetcode】316. Remove Duplicate Letters的更多相关文章
- 【LeetCode】316. Remove Duplicate Letters 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【lintcode】834. Remove Duplicate Letters
题目描述: Given a string which contains only lowercase letters, remove duplicate letters so that every l ...
- 贪心:leetcode 870. Advantage Shuffle、134. Gas Station、452. Minimum Number of Arrows to Burst Balloons、316. Remove Duplicate Letters
870. Advantage Shuffle 思路:A数组的最大值大于B的最大值,就拿这个A跟B比较:如果不大于,就拿最小值跟B比较 A可以改变顺序,但B的顺序不能改变,只能通过容器来获得由大到小的顺 ...
- 【LeetCode】652. Find Duplicate Subtrees 解题报告(Python)
[LeetCode]652. Find Duplicate Subtrees 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 【LeetCode】402. Remove K Digits 解题报告(Python)
[LeetCode]402. Remove K Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 【LeetCode】722. Remove Comments 解题报告(Python)
[LeetCode]722. Remove Comments 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/remove-c ...
- leetcode@ [316] Remove Duplicate Letters (Stack & Greedy)
https://leetcode.com/problems/remove-duplicate-letters/ Given a string which contains only lowercase ...
- [LeetCode] 316. Remove Duplicate Letters 移除重复字母
Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...
- leetcode 316. Remove Duplicate Letters
Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...
随机推荐
- Java基本数据类型及所占字节大小
一.Java基本数据类型 基本数据类型有8种:byte.short.int.long.float.double.boolean.char 分为4类:整数型.浮点型.布尔型.字符型. 整数型:byte. ...
- vue项目轮播图的实现
利用 Vue-Awesome-Swiper插件来做轮播效果,github地址:https://github.com/surmon-china/vue-awesome-swiper 安装 npm i ...
- MariaDB强势席卷DB-Engines榜单后续,与阿里云达成全球独家战略合作
2018年10月份,DB-Engines 发布了月全球数据库排名,排名前三的一如既往还是Oracle.MySQL.Microsoft SQL Server.排名是重要指标,同时增长率的重要性也同样备受 ...
- Python基础教程(021)--Pycharm简介
前言 学习Pycharm开发工具 内容 项目:就是一个功能复杂的软件 目标 必须掌握的工具
- 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件
用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...
- BZOJ 5137: [Usaco2017 Dec]Standing Out from the Herd(后缀自动机)
传送门 解题思路 这个似乎和以前做过的一道题很像,只不过这个是求本质不同子串个数.肯定是先把广义\(SAM\)造出来,然后\(dfs\)时把子节点的信息合并到父节点上,看哪个只被一个串覆盖,\(ans ...
- Hibernate:More than one row with the given identifier was found解决办法
今天写一个Action 通过 HQL 查询一个表 出现异常 “More than one row with the given identifier was found” 问题原因: 数据库出现数据异 ...
- CPUID
http://en.wikipedia.org/wiki/CPUID CPUID From Wikipedia, the free encyclopedia The CPUID opcode i ...
- Nuget-Doc:Nuget 简介
ylbtech-Nuget-Doc:Nuget 简介 1.返回顶部 1. NuGet 简介 2019/05/24 适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建.共享和 ...
- win10下cmd备注
要复制cmd里的字符串,右键选标记,选中待复制的字符串,ctrl+c 复制,ctrl+v粘贴内容(或者右键选择复制).这项操作支持复制cmd里的内容到其他地方,如txt里 win10之前cmd不支持c ...