力扣-316.去除重复字母

79 阅读1分钟

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的

字典序

最小(要求不能打乱其他字符的相对位置)。

示例 1:

输入: s = "bcabc"
输出: "abc"

示例 2:

输入: s = "cbacdcbc"
输出: "acdb"

遇到一个新字符 如果比栈顶小 并且在该字符后面还有和栈顶一样的 就把栈顶的字符抛弃了

public String removeDuplicateLetters(String s) {
        Stack<Character> stack=new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            Character c=s.charAt(i);
            if(stack.contains(c))
                continue;
            while(!stack.isEmpty() &&
                    stack.peek()>c &&
                    s.indexOf(stack.peek(),i) != -1)
                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);
    }