AlgoMaster Logo

Remove Duplicate Letters

s=bcabc
1public String removeDuplicateLetters(String s) {
2    Map<Character, Integer> freq = new HashMap<>();
3    for (char c : s.toCharArray()) {
4        freq.put(c, freq.getOrDefault(c, 0) + 1);
5    }
6
7    Stack<Character> stack = new Stack<>();
8    Set<Character> inStack = new HashSet<>();
9
10    for (int i = 0; i < s.length(); i++) {
11        char c = s.charAt(i);
12        freq.put(c, freq.get(c) - 1);
13
14        if (inStack.contains(c)) {
15            continue;
16        }
17
18        while (!stack.isEmpty() && stack.peek() > c && freq.get(stack.peek()) > 0) {
19            char removed = stack.pop();
20            inStack.remove(removed);
21        }
22
23        stack.push(c);
24        inStack.add(c);
25    }
26
27    StringBuilder result = new StringBuilder();
28    for (char c : stack) {
29        result.append(c);
30    }
31    return result.toString();
32}
0 / 22
bcabcstackfreq: {}inStack: []