文章目录

  • 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. 不同字符的最小子序列(单调栈)相关推荐

  1. leetcode 316. 去除重复字母(单调栈)

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

  2. 316. 去除重复字母

    链接:316. 去除重复字母 题解:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/qu-chu-zhong-fu ...

  3. LeetCode 练习——316. 去除重复字母

    文章目录 1.题目描述 2.思路 2.1 代码 2.2 测试结果 3.总结 1.题目描述 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典 ...

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

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

  5. 20200213:去除重复字母(leetcode316)

    去除重复字母 题目 思路与算法 代码实现 题目 思路与算法 首先对字符串进行遍历,将当前字符串依次入栈, 注意入栈的条件: 新入栈的元素在栈内没有出现过,必须是未出现过的元素 新入栈的元素如果比栈顶元 ...

  6. 力扣- -去除重复字母

    力扣- -去除重复字母 文章目录 力扣- -去除重复字母 一.题目描述 二.分析 三.代码 四.问题描述 五.代码 一.题目描述 二.分析 题目的要求总结出来有三点: 要求一.要去重. 要求二.去重字 ...

  7. 贪心+单调栈——去除重复字母(Leetcode 316)

    题目选自Leetcode 316 第一步当然是好好读题~ 有的人读着很快啊,啪 一下 哦原来就是个排序 哒哒哒一分钟解决战斗,欸 怎么全错了. 再仔细一看,原来少了重要的条件--要求不能打乱其他字符的 ...

  8. char* 去除后面几个字符_【算法打卡】去除重复字母

    难度:中等 题目: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次.需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置). 示例 1: 输入:s = "b ...

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

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

最新文章

  1. IE跨Iframe时Session丢失问题
  2. “习惯测试”三步法,打造完美用户体验
  3. 每日一皮:最适合编程写代码的键盘!
  4. 使用canvas实现360水球波动
  5. 把一个人的特点写具体作文_五年级下册第五单元习作把一个人的特点写具体写作指导+范文赏析+图文解读...
  6. Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)
  7. Redis(十四):Jedis
  8. 【2021最新版】Linux面试题总结(48道题含答案解析)
  9. 君威u0073故障码解决_U0073故障码_U0073故障码是什么故障、排除方法、怎么消除_车主指南...
  10. Android系统网络架构
  11. process.start打开后没有界面_越狱后安装这些美化插件,让手机变好看
  12. DELL服务器运行硬件检测
  13. 格拉姆角场GAF将时序数据转换为图像并应用于故障诊断
  14. JavaScript事件解析
  15. plt的默认风格/样式设置 or 将plt.rcParams恢复恢复到默认参数设置
  16. 第31章 MySQL 处理重复数据教程
  17. mcv 与mvvm 浅谈
  18. 用Matlab的.m脚本文件处理实验室数据
  19. 大数据开发学习资料汇总
  20. Python爬虫进阶必备 | 极X助手加密算法分析

热门文章

  1. 案例 自动办公_1300张办公系列前台参考图,请您查收!
  2. 【Go 并发控制】上下文 context 源码
  3. resin指定java版本_resin的几个常用配置
  4. LInux:shell 彩色进度条实现(有图有代码有真相!!!)
  5. java程序可分为两个基本文件_1 Java语言概述答案
  6. 《跟我一起写Makefile》读书笔记(1)
  7. 编码 括号_Java编码规范整理汇总
  8. 【技术博客-总览--重要】
  9. composer-安装插件包
  10. HDU 4701 Game