1、题目描述
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
示例:
输入:s = "bcabc"
输出:"abc"
2、题目分析
- 首先每个字母都不能重复,也就是所有字母有且只保留一个
- 其次,返回结果的字典序最小。这就要求去除重复字母的位置要有技巧,遇到一个新字符 如果比栈顶小 并且在新字符后面还有和栈顶一样的 就把栈顶的字符抛弃了
- 首先,考虑使用栈来解决这个问题,当栈空的时候入栈
- 先比较当前入栈元素与栈顶的元素大小,如果栈顶元素删的只剩下一个就不用比较了必须保留;栈顶剩余大于一个时,如果入栈元素比栈顶元素小,则栈顶出栈。
- 还要判断入栈元素是不是意见在栈中了,如果已经在了那么本轮判断结束,直接舍弃入栈元素
- 如果不在就入栈,用一个Boolean数组标记是否已入栈
3、代码实现
class Solution {
public String removeDuplicateLetters(String s) {
int[] count = new int[26];
for(int i = 0;i < s.length();i