用时4ms,内存1M (好高啊魂淡

思路:

先找出在“仍保留原字符串中所有字母种类,开头字母最小”的后缀子字符串。i.e.如果前面遍历到的字母在后面仍有出现则忽略掉,继续找最小首字母。

实现为:

//counts数组存储各类字母的数量 ,当某个字母减为0时说明后面不会再出现,应就此停止
for (int i=0;i<length;i++) {if (s[i]<smallest_ch) {smallest_ch_index=i;smallest_ch=s[i];}if(--counts[s[i]-'a']==0)break;
}

然后切掉可以省略的前半截字符串,答案应为“当前找到的最小首字母”+“首字母后的子串去掉所有该字母,再对该子串进行remove duplicate letters操作”。

完整实现:

class Solution {
public:string removeDuplicateLetters(string s) {auto length=s.size();if (length<=1)return s;int counts[26]={0};for (int i=0;i<length;i++)++counts[s[i]-'a'];int smallest_ch_index=0;char smallest_ch=s[0];for (int i=0;i<length;i++) {if (s[i]<smallest_ch) {smallest_ch_index=i;smallest_ch=s[i];}if(--counts[s[i]-'a']==0)break;}string remained=s.substr(smallest_ch_index+1);while (remained.find(smallest_ch)!=string::npos)remained=remained.erase(remained.find(smallest_ch),1);return smallest_ch+removeDuplicateLetters(remained);}
};

转载于:https://www.cnblogs.com/RDaneelOlivaw/p/10352326.html

[leetcode] remove duplicate letters相关推荐

  1. LeetCode 316. Remove Duplicate Letters

    (自己开发的博客,欢迎访问)https://www.weiboke.online 316. Remove Duplicate Letters Given a string which contains ...

  2. LeetCode 316 Remove Duplicate Letters(删除重复字符)

    问题:给出一个字符串,要求删除重复字符,字典序是最小并且保持字符的相对位置. 思路: 方法一,使用递归算法,在出现只出现一次的前缀字符串中确定最小字符,然后在剩下的子串中递归. 方法二,使用栈做,先记 ...

  3. leetcode 316. Remove Duplicate Letters | 316. 去除重复字母(单调栈解法)

    题目 https://leetcode.com/problems/remove-duplicate-letters 题解 关于什么是"字典序" 字典序,换成数字更好理解一点 a:1 ...

  4. 316 Remove Duplicate Letters 去除重复字母

    给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果. 例如: 给定 "bcabc" 返回 &quo ...

  5. 316. Remove Duplicate Letters 去除重复字母

    给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...

  6. LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法

    题目地址:Number of Longest Increasing Subsequence - LeetCode 做这道题目前建议先做:Longest Increasing Subsequence - ...

  7. LeetCode:Remove Duplicates from Sorted List I II

    LeetCode:Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such t ...

  8. Remove Duplicate

    题目描述: Petya has an array a consisting of n integers. He wants to remove duplicate (equal) elements. ...

  9. [LeetCode] Remove Element 分析

    Remove Element算是LeetCode的一道水题,不过这题也有多种做法,现就我所知的几种做一点讨论. 题目链接:https://leetcode.com/problems/remove-el ...

最新文章

  1. PNAS-2018-根系分泌物香豆素调控微生物群落结构并促进植物健康
  2. C++实现RTMP协议发送H.264编码及AAC编码的音视频
  3. 【Python之路Day17】Python Web框架之 Django
  4. Oracle中NVARCHAR2字符集不匹配问题
  5. gtest 测试部分_全部关于测试–第1部分
  6. 十二个生活习惯,增加你的心灵压力
  7. l380废墨收集垫已到使用寿命_湖北雨水收集系统定制
  8. 怎么复活不了睡袋_测评 | 萌新的北京冬季户外睡袋初体验
  9. 百度文库崩溃半小时:赶论文的网友也集体崩了
  10. oracle 参数脚本,oracle 查看隐含参数脚本
  11. HDU3788 ZOJ问题【文本处理】
  12. Android TTS(TextToSpeech)实践
  13. 运放输入偏置电流方向_运放中输入偏置电流和输入失调电流的区别??
  14. warning: backslash and newline separated by space
  15. Android图片拼接
  16. babylonjs 分部加载模型_基于Babylonjs自制WebGL3D模型编辑器
  17. git修改已提交commit的Author信息
  18. 微信小程序中实现获奖名单滚动播放
  19. 保持健康和活力 - 腰间盘突出康复指南
  20. java基于微信小程序的个人管理软件 uniapp 小程序

热门文章

  1. hdu-2204(容斥原理)
  2. 用CRF做命名实体识别——NER系列(三)
  3. 【译】On Path Independence
  4. android 动态移动xy,android – 如何使用AChartEngine动态线图和X轴自动平移(滚动)?...
  5. Qt 数据库操作(二)
  6. shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...
  7. 修改oracle数据连接数据库,修改Oracle数据库的连接数
  8. 使用animate实现页面过度_很多人都在使用的开源CSS动画效果库——animate.css
  9. Transformer、BERT学习笔记
  10. 2017年09月23日普级组 树塔狂想曲