File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change 1+ function getWordsInLongestSubsequence ( words , groups ) {
2+ const memo = new Map ( ) ;
3+ const n = words . length ;
4+
5+ function hamming ( w1 , w2 ) {
6+ let diff = 0 ;
7+ for ( let i = 0 ; i < w1 . length ; i ++ ) {
8+ if ( w1 [ i ] !== w2 [ i ] ) diff ++ ;
9+ }
10+ return diff === 1 ;
11+ }
12+
13+ function dfs ( i , lastGroup , lastWord ) {
14+ if ( i >= n ) return [ ] ;
15+ const key = `${ i } |${ lastGroup } |${ lastWord } ` ;
16+ if ( memo . has ( key ) ) return memo . get ( key ) ;
17+
18+ let take = [ ] ;
19+ if (
20+ words [ i ] . length === lastWord . length &&
21+ hamming ( words [ i ] , lastWord ) &&
22+ groups [ i ] !== lastGroup
23+ ) {
24+ take = [ words [ i ] , ...dfs ( i + 1 , groups [ i ] , words [ i ] ) ] ;
25+ }
26+
27+ const skip = dfs ( i + 1 , lastGroup , lastWord ) ;
28+ const result = take . length > skip . length ? take : skip ;
29+ memo . set ( key , result ) ;
30+ return result ;
31+ }
32+
33+ let best = [ ] ;
34+ for ( let i = 0 ; i < n ; i ++ ) {
35+ const res = [ words [ i ] , ...dfs ( i + 1 , groups [ i ] , words [ i ] ) ] ;
36+ if ( res . length > best . length ) best = res ;
37+ }
38+
39+ return best ;
40+ }
You can’t perform that action at this time.
0 commit comments