File tree Expand file tree Collapse file tree 5 files changed +96
-0
lines changed
longest-common-subsequence
longest-repeating-character-replacement Expand file tree Collapse file tree 5 files changed +96
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for _Node.
3+ * class _Node {
4+ * val: number
5+ * neighbors: _Node[]
6+ *
7+ * constructor(val?: number, neighbors?: _Node[]) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.neighbors = (neighbors===undefined ? [] : neighbors)
10+ * }
11+ * }
12+ *
13+ */
14+
15+ /*
16+ */
17+ function cloneGraph ( node : _Node | null ) : _Node | null {
18+ const clones = new Map < _Node , _Node > ( )
19+ const dfs = ( n : _Node ) => {
20+ if ( n === null ) return n
21+
22+ if ( clones . has ( n ) ) {
23+ return clones . get ( n )
24+ }
25+
26+ const copy = new _Node ( n . val )
27+ clones . set ( n , copy )
28+
29+ for ( const neighbor of n . neighbors ) {
30+ copy . neighbors . push ( dfs ( neighbor ) )
31+ }
32+ return copy
33+ }
34+ return dfs ( node )
35+ } ;
Original file line number Diff line number Diff line change 1+ function longestCommonSubsequence ( text1 : string , text2 : string ) : number {
2+ const m1 = text1 . length
3+ const m2 = text2 . length
4+
5+ const dp : number [ ] [ ] = Array ( m1 + 1 ) . fill ( null ) . map ( ( ) => Array ( m2 + 1 ) . fill ( 0 ) )
6+
7+ for ( let r = 1 ; r <= m1 ; r ++ ) {
8+ for ( let c = 1 ; c <= m2 ; c ++ ) {
9+ if ( text1 [ r - 1 ] === text2 [ c - 1 ] ) {
10+ dp [ r ] [ c ] = dp [ r - 1 ] [ c - 1 ] + 1
11+ } else {
12+ dp [ r ] [ c ] = Math . max ( dp [ r - 1 ] [ c ] , dp [ r ] [ c - 1 ] )
13+ }
14+ }
15+ }
16+ return dp [ m1 ] [ m2 ]
17+ } ;
Original file line number Diff line number Diff line change 1+ function characterReplacement ( s : string , k : number ) : number {
2+ /*
3+
4+ */
5+ let maxLen = 0
6+ let maxCnt = new Map < string , number > ( )
7+ let start = 0
8+ let maxFreq = 0
9+ for ( let e = 0 ; e < s . length ; e ++ ) {
10+ maxCnt . set ( s [ e ] , ( maxCnt . get ( s [ e ] ) || 0 ) + 1 )
11+ maxFreq = Math . max ( maxFreq , maxCnt . get ( s [ e ] ) )
12+ while ( e - start + 1 - maxFreq > k ) {
13+ maxCnt . set ( s [ start ] , maxCnt . get ( s [ start ] ) - 1 )
14+ start += 1
15+ }
16+ maxLen = Math . max ( e - start + 1 , maxLen )
17+ }
18+ return maxLen
19+ } ;
Original file line number Diff line number Diff line change 1+ function countSubstrings ( s : string ) : number {
2+ const sLen = s . length ;
3+ const dp = Array ( sLen ) . fill ( null ) . map ( ( ) => Array ( sLen ) . fill ( false ) )
4+ let cnt = 0
5+
6+ for ( let i = sLen - 1 ; i >= 0 ; i -- ) {
7+ for ( let j = i ; j < sLen ; j ++ ) {
8+ if ( i === j ) {
9+ dp [ i ] [ j ] = true
10+ } else if ( j === i + 1 ) {
11+ dp [ i ] [ j ] = ( s [ i ] === s [ j ] )
12+ } else {
13+ dp [ i ] [ j ] = ( s [ i ] === s [ j ] ) && dp [ i + 1 ] [ j - 1 ]
14+ }
15+
16+ if ( dp [ i ] [ j ] ) cnt ++
17+ }
18+ }
19+ return cnt
20+ } ;
Original file line number Diff line number Diff line change 1+ function reverseBits ( n : number ) : number {
2+ const binaryStr = n . toString ( 2 ) . padStart ( 32 , '0' )
3+ const reverseNum = binaryStr . split ( '' ) . reverse ( ) . join ( '' )
4+ return parseInt ( reverseNum , 2 )
5+ } ;
You can’t perform that action at this time.
0 commit comments