2030. 含特定字母的最小子序列
题目地址(2030. 含特定字母的最小子序列)
https://leetcode-cn.com/problems/smallest-k-length-subsequence-with-occurrences-of-a-letter/
题目描述
前置知识
单调栈
公司
暂无
思路
之前我写了一篇文章,里面详细介绍了单调栈解决这种删除若干并求最小(或最大)字典序的题目,没有看过的建议先看下那篇文章 一招吃遍力扣四道题,妈妈再也不用担心我被套路啦~。
这道题实际上就是上文提到的 402 号题目的进阶。也就是我们需要多考虑 repetition 个 letter 的情况。
和 402 类似,只不过我们需要多加几个判断:
在 stack 栈顶是 letter 的情况不能随意 pop,这是因为 pop
可能
导致永远无法满足 repetition 个 letter。最后不能直接取 stack 前 remain 个。因为可能导致永远无法满足 repetition 个 letter,因此需要记录一下剔除超过 remain 部分元素后,我们剔除了多少 letter(假设为 m 个),之后把末尾的 m 个非 letter 替换为 letter 以满足 repetiton 的要求
经过上面的操作,我们能保证 stack 是满足 repetition 个 letter 情况下的最小的字典序。
关键点
先不考虑 repetition,这就是一个典型的单调栈题目
代码
语言支持:Python3
Python3 Code:
复杂度分析
令 n 为数组长度。
时间复杂度:$O(n)$
空间复杂度:$O(n)$
此题解由 力扣刷题插件 自动生成。
力扣的小伙伴可以关注我,这样就会第一时间收到我的动态啦~
以上就是本文的全部内容了。大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 45K star 啦。大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
最后更新于