File tree 1 file changed +31
-5
lines changed
scripts/algorithms/R/Remove Duplicate Letters
1 file changed +31
-5
lines changed Original file line number Diff line number Diff line change
1
+ // Runtime: 56 ms (Top 86.81%) | Memory: 51.10 MB (Top 5.49%)
2
+
3
+ /**
4
+ * @param {string } s
5
+ * @return {string }
6
+ */
1
7
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 ;
7
11
}
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 ( '' ) ;
8
34
} ;
You can’t perform that action at this time.
0 commit comments