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