LeetCode 316. 去除重复字母 / 1081. 不同字符的最小子序列(单调栈)
文章目录
- 1. 题目
- 2. 解题
1. 题目
LC 316:
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入:s = "bcabc"
输出:"abc"示例 2:
输入:s = "cbacdcbc"
输出:"acdb"提示:
1 <= s.length <= 10^4
s 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-letters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
LC 1081:
返回字符串 text 中按字典序排列最小的子序列,该子序列包含 text 中所有不同字符一次。
示例 1:
输入:"cdadabcc"
输出:"adbc"示例 2:
输入:"abcd"
输出:"abcd"示例 3:
输入:"ecbacba"
输出:"eacb"示例 4:
输入:"leetcode"
输出:"letcod"提示:
1 <= text.length <= 1000
text 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 记录每个字符最后出现的位置
- 一旦前面的字符比当前的大,且在后面还存在该大字符,则删除该大的字符
class Solution {public:string removeDuplicateLetters(string s) {vector<int> last(26, -1);for(int i = 0; i < s.size(); ++i)last[s[i]-'a'] = i;//记录字符出现的最后的位置string ans;unordered_set<char> set;//记录字符是否写入答案了for(int i = 0; i < s.size(); ++i){if(set.count(s[i]))continue;while(!ans.empty() && ans.back() > s[i] && last[ans.back()-'a'] > i){ // 前一个字符 比当前的大,且 后面还有这个大的字符set.erase(ans.back());ans.pop_back();}set.insert(s[i]);ans += s[i];}return ans;}
};
4 ms 7.2 MB
1081题的代码跟上面一模一样
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 316. 去除重复字母 / 1081. 不同字符的最小子序列(单调栈)相关推荐
- leetcode 316. 去除重复字母(单调栈)
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 注意:该题与 1081 https://leetcode-c ...
- 316. 去除重复字母
链接:316. 去除重复字母 题解:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/qu-chu-zhong-fu ...
- LeetCode 练习——316. 去除重复字母
文章目录 1.题目描述 2.思路 2.1 代码 2.2 测试结果 3.总结 1.题目描述 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典 ...
- leetcode 316. Remove Duplicate Letters | 316. 去除重复字母(单调栈解法)
题目 https://leetcode.com/problems/remove-duplicate-letters 题解 关于什么是"字典序" 字典序,换成数字更好理解一点 a:1 ...
- 20200213:去除重复字母(leetcode316)
去除重复字母 题目 思路与算法 代码实现 题目 思路与算法 首先对字符串进行遍历,将当前字符串依次入栈, 注意入栈的条件: 新入栈的元素在栈内没有出现过,必须是未出现过的元素 新入栈的元素如果比栈顶元 ...
- 力扣- -去除重复字母
力扣- -去除重复字母 文章目录 力扣- -去除重复字母 一.题目描述 二.分析 三.代码 四.问题描述 五.代码 一.题目描述 二.分析 题目的要求总结出来有三点: 要求一.要去重. 要求二.去重字 ...
- 贪心+单调栈——去除重复字母(Leetcode 316)
题目选自Leetcode 316 第一步当然是好好读题~ 有的人读着很快啊,啪 一下 哦原来就是个排序 哒哒哒一分钟解决战斗,欸 怎么全错了. 再仔细一看,原来少了重要的条件--要求不能打乱其他字符的 ...
- char* 去除后面几个字符_【算法打卡】去除重复字母
难度:中等 题目: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 示例 1: 输入:s = "b ...
- 316 Remove Duplicate Letters 去除重复字母
给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果. 例如: 给定 "bcabc" 返回 &quo ...
最新文章
- IE跨Iframe时Session丢失问题
- “习惯测试”三步法,打造完美用户体验
- 每日一皮:最适合编程写代码的键盘!
- 使用canvas实现360水球波动
- 把一个人的特点写具体作文_五年级下册第五单元习作把一个人的特点写具体写作指导+范文赏析+图文解读...
- Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)
- Redis(十四):Jedis
- 【2021最新版】Linux面试题总结(48道题含答案解析)
- 君威u0073故障码解决_U0073故障码_U0073故障码是什么故障、排除方法、怎么消除_车主指南...
- Android系统网络架构
- process.start打开后没有界面_越狱后安装这些美化插件,让手机变好看
- DELL服务器运行硬件检测
- 格拉姆角场GAF将时序数据转换为图像并应用于故障诊断
- JavaScript事件解析
- plt的默认风格/样式设置 or 将plt.rcParams恢复恢复到默认参数设置
- 第31章 MySQL 处理重复数据教程
- mcv 与mvvm 浅谈
- 用Matlab的.m脚本文件处理实验室数据
- 大数据开发学习资料汇总
- Python爬虫进阶必备 | 极X助手加密算法分析