1
/**
2
* @param {string} s
3
* @return {string}
4
*/
5
var removeDuplicateLetters = function (s) {
6
const lastOccurrence = {};
7
for (let i = 0; i < s.length; i++) {
8
lastOccurrence[s[i]] = i;
9
}
10

11
const stack = [];
12
const visited = new Set();
13

14
for (let i = 0; i < s.length; i++) {
15
if (visited.has(s[i])) {
16
continue;
17
}
18

19
while (
20
stack.length > 0 &&
21
s[i] < stack[stack.length - 1] &&
22
i < lastOccurrence[stack[stack.length - 1]]
23
) {
24
visited.delete(stack.pop());
25
}
26

27
visited.add(s[i]);
28
stack.push(s[i]);
29
}
30

31
return stack.join("");
32
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0