给你一个字符串
s
,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
https://blog.csdn.net/weixin_53364209?type=bloghttps://blog.csdn.net/weixin_53364209?type=blog
class Solution {
public String removeDuplicateLetters(String s) {
//创建一个栈,用来存储字符
Stack<Character> stack=new Stack<>();
for (int i = 0; i < s.length(); i++) {
//取出s字符串对应索引处的字符
Character c=s.charAt(i);
if(stack.contains(c))
continue;//如果栈里已经包含了字符C,那么继续下一次循环
while(!stack.isEmpty()&&stack.peek()>c&&s.indexOf(stack.peek(),i)!=-1)
//如果满足:①栈不为空,②栈顶元素ASCII值比字符c的ASCII值大③后面还有和栈顶一样的字符
//那么取出栈顶元素
stack.pop();
stack.push(c);
}
char chars[]=new char[stack.size()];
for (int i = 0; i < stack.size(); i++) {
chars[i]=stack.get(i);
}
return new String(chars);
}
}