去除重复字母
题目:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例 1:
输入:s = "bcabc"
输出:"abc"
思路:1.用栈存储当前遍历元素。
2.如果当前元素未被访问过,则判断其字典序是否小于栈顶元素而且栈顶元素在以后还会出现;
3.如果小于,则弹出当前栈顶,继续进行判断(为了获取字典序最小的序列)
4.如果不满足上述条件,直接将其加入栈中即可
5.最后将栈中字符转换成字符串即可

复杂度分析
时间复杂度:O(N)。虽然外循环里面还有一个内循环,但内循环的次数受栈中剩余字符总数的限制,因此最终复杂度仍为O(N)。
空间复杂度:O(1)。看上去空间复杂度像是O(N),但这不对!首先, seen 中字符不重复,其大小受字母表大小的限制。其次,只有 stack 中不存在的元素才会被压入,因此 stack 中的元素也唯一。所以最终空间复杂度为O(1)。
该博客介绍了一种算法,用于在不改变原有字符顺序的前提下,从给定字符串中移除重复的字母,确保结果字符串的字典序最小。博主通过使用栈数据结构和字典序比较策略实现了这一功能。复杂度分析显示,算法的时间复杂度为O(N),空间复杂度为O(1)。
934

被折叠的 条评论
为什么被折叠?



