File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {string } s
3+ * @param {string[] } wordDict
4+ * @return {boolean }
5+ */
6+ let wordBreak = function ( s , wordDict ) {
7+ let n = s . length
8+ if ( ! n ) return true
9+
10+ let wordSet = new Set ( wordDict )
11+ let dp = [ ]
12+ dp [ 0 ] = true
13+
14+ for ( let i = 0 ; i <= n ; i ++ ) {
15+ for ( let j = i ; j >= 0 ; j -- ) {
16+ let word = s . slice ( j , i )
17+ if ( wordSet . has ( word ) && dp [ j ] ) {
18+ dp [ i ] = true
19+ break
20+ }
21+ }
22+ }
23+
24+ return ! ! dp [ n ]
25+ }
26+ /**
27+ * @param {string[] } words
28+ * @return {string }
29+ */
30+ let longestWord = function ( words ) {
31+ // 先长度降序 后字典序升序 排序
32+ words . sort ( ( a , b ) => {
33+ let diff = b . length - a . length
34+ if ( diff !== 0 ) {
35+ return diff
36+ } else {
37+ return a < b ? - 1 : 1
38+ }
39+ } )
40+ words = Array . from ( new Set ( words ) )
41+ for ( let i = 0 ; i < words . length ; i ++ ) {
42+ let word = words [ i ]
43+ let rest = words . slice ( 0 , i ) . concat ( words . slice ( i + 1 ) )
44+ if ( wordBreak ( word , rest ) ) {
45+ return word
46+ }
47+ }
48+ return ""
49+ }
You can’t perform that action at this time.
0 commit comments