Skip to content

Commit faa701d

Browse files
committed
Runtime: 56 ms (Top 86.81%) | Memory: 51.10 MB (Top 5.49%)
1 parent 329563b commit faa701d

File tree

1 file changed

+31
-5
lines changed

1 file changed

+31
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
1+
// Runtime: 56 ms (Top 86.81%) | Memory: 51.10 MB (Top 5.49%)
2+
3+
/**
4+
* @param {string} s
5+
* @return {string}
6+
*/
17
var removeDuplicateLetters = function(s) {
2-
let sset = [...new Set(s)]
3-
if(Math.min(sset) == sset[0]) return [...sset].join('');
4-
else {
5-
sset.sort();
6-
return [...sset].join('');
8+
const lastOccurrence = {};
9+
for (let i = 0; i < s.length; i++) {
10+
lastOccurrence[s[i]] = i;
711
}
12+
13+
const stack = [];
14+
const visited = new Set();
15+
16+
for (let i = 0; i < s.length; i++) {
17+
if (visited.has(s[i])) {
18+
continue;
19+
}
20+
21+
while (
22+
stack.length > 0 &&
23+
s[i] < stack[stack.length - 1] &&
24+
i < lastOccurrence[stack[stack.length - 1]]
25+
) {
26+
visited.delete(stack.pop());
27+
}
28+
29+
visited.add(s[i]);
30+
stack.push(s[i]);
31+
}
32+
33+
return stack.join('');
834
};

0 commit comments

Comments
 (0)