Remove Duplicate Letters
Last updated
Last updated
class Solution {
public String removeDuplicateLetters(String S) {
Stack<Character> s = new Stack<>();
Set<Character> visited = new HashSet<>();
int[] set = new int[26];
for (char c : S.toCharArray()) {
set[c - 'a']++;
}
for (char c : S.toCharArray()) {
set[c - 'a']--;
if (visited.contains(c)) { continue; }
while (!s.isEmpty() && c < s.peek() && set[s.peek() - 'a'] != 0) {
visited.remove(s.pop());
}
s.push(c);
visited.add(c);
}
StringBuilder sb = new StringBuilder();
while (!s.isEmpty()) {
sb.append(s.pop());
}
return sb.reverse().toString();
}
}