File tree Expand file tree Collapse file tree 4 files changed +117
-0
lines changed Expand file tree Collapse file tree 4 files changed +117
-0
lines changed Original file line number Diff line number Diff line change
1
+ let wordBreak = function ( s , wordDict ) {
2
+ let dp = new Array ( s . length + 1 ) ;
3
+ dp . fill ( false ) ;
4
+ dp [ s . length ] = true ;
5
+
6
+ let word = '' ;
7
+ for ( let i = s . length - 1 ; i >= 0 ; i -- ) {
8
+ word = s [ i ] + word ;
9
+
10
+ if ( wordDict . includes ( word ) && i + word . length < dp . length ) {
11
+ dp [ i ] = dp [ i + word . length ] ;
12
+ word = '' ;
13
+ } else {
14
+ dp [ i ] = false ;
15
+ }
16
+ }
17
+
18
+ return dp [ 0 ] ;
19
+ } ;
Original file line number Diff line number Diff line change
1
+ let alienOrder = function ( words ) {
2
+ let graph = { } ;
3
+
4
+ for ( let i = 0 ; i < words . length ; i ++ ) {
5
+ for ( let j = 0 ; j < words [ i ] . length ; j ++ ) {
6
+ graph [ words [ i ] [ j ] ] = new Set ( ) ;
7
+ }
8
+ }
9
+
10
+ for ( let i = 0 ; i < words . length - 1 ; i ++ ) {
11
+ let word1 = words [ i ] ;
12
+ let word2 = words [ i + 1 ] ;
13
+
14
+ if ( word1 . length > word2 . length && ( word1 + '' ) . startsWith ( word2 ) ) {
15
+ return "" ;
16
+ }
17
+
18
+ for ( let j = 0 ; j < Math . min ( word1 . length , word2 . length ) ; j ++ ) {
19
+ let c1 = word1 [ j ] ;
20
+ let c2 = word2 [ j ] ;
21
+
22
+ if ( c1 !== c2 ) {
23
+ graph [ c1 ] . add ( c2 ) ;
24
+ break ;
25
+ }
26
+ }
27
+ }
28
+
29
+ let visited = { } ; // 'false' = visited, 'true' = current path
30
+ let res = [ ] ;
31
+
32
+ function dfs ( c ) {
33
+ if ( visited [ c ] ) {
34
+ return Boolean ( visited [ c ] ) ;
35
+ }
36
+
37
+ visited [ c ] = 'true' ;
38
+ for ( let nei of graph [ c ] ) {
39
+ if ( dfs ( nei ) ) {
40
+ return true ;
41
+ }
42
+ }
43
+
44
+ visited [ c ] = 'false' ;
45
+ res . push ( c ) ;
46
+ }
47
+
48
+ Object . keys ( graph ) . forEach ( c => {
49
+ if ( dfs ( c ) ) {
50
+ return '' ;
51
+ }
52
+ } )
53
+
54
+ return res . reverse ( ) . join ( '' ) ;
55
+ }
Original file line number Diff line number Diff line change
1
+ let eraseOverlapIntervals = function ( intervals ) {
2
+ intervals = intervals . sort ( ( a , b ) => a [ 0 ] - b [ 1 ] ) ;
3
+
4
+ let currentEnd = intervals [ 0 ] [ 1 ] ;
5
+ let res = 0 ;
6
+
7
+ for ( let i = 1 ; i < intervals . length ; i ++ ) {
8
+ if ( currentEnd > intervals [ i ] [ 0 ] ) {
9
+ res += 1 ;
10
+ currentEnd = Math . min ( intervals [ i ] [ 1 ] , currentEnd ) ;
11
+ } else {
12
+ currentEnd = intervals [ i ] [ 1 ] ;
13
+ }
14
+ }
15
+
16
+ return res ;
17
+ } ;
Original file line number Diff line number Diff line change
1
+ let insert = function ( intervals , newInterval ) {
2
+ let res = [ ] ;
3
+ let isAdded = false ;
4
+
5
+ intervals . forEach ( int => {
6
+ if ( int [ 0 ] > newInterval [ 1 ] ) {
7
+ if ( ! isAdded ) {
8
+ res . push ( newInterval ) ;
9
+ isAdded = true ;
10
+ }
11
+
12
+ res . push ( int ) ;
13
+ } else if ( int [ 1 ] < newInterval [ 0 ] ) {
14
+ res . push ( int ) ;
15
+ } else {
16
+ newInterval [ 0 ] = Math . min ( newInterval [ 0 ] , int [ 0 ] ) ;
17
+ newInterval [ 1 ] = Math . max ( newInterval [ 1 ] , int [ 1 ] ) ;
18
+ }
19
+ } ) ;
20
+
21
+ if ( ! isAdded ) {
22
+ res . push ( newInterval ) ;
23
+ }
24
+
25
+ return res ;
26
+ } ;
You can’t perform that action at this time.
0 commit comments