File tree Expand file tree Collapse file tree 2 files changed +89
-7
lines changed
javascript/42_dynamic_programming
python/42_dynamic_programming Expand file tree Collapse file tree 2 files changed +89
-7
lines changed Original file line number Diff line number Diff line change 1+ function lsDist ( str1 , str2 ) {
2+ var n = str1 . length ;
3+ var m = str2 . length ;
4+
5+ var memo = new Array ( n ) ;
6+ for ( let i = 0 ; i < n ; i ++ ) {
7+ memo [ i ] = new Array ( m ) ;
8+ if ( str1 [ i ] === str2 [ 0 ] ) {
9+ memo [ i ] [ 0 ] = i - 0 ;
10+ } else if ( i === 0 ) {
11+ memo [ i ] [ 0 ] = 1 ;
12+ } else {
13+ memo [ i ] [ 0 ] = memo [ i - 1 ] [ 0 ] + 1 ;
14+ }
15+ }
16+
17+ for ( let j = 0 ; j < m ; j ++ ) {
18+ if ( str1 [ 0 ] === str2 [ j ] ) {
19+ memo [ 0 ] [ j ] = j - 0 ;
20+ } else if ( j === 0 ) {
21+ memo [ 0 ] [ j ] = 1 ;
22+ } else {
23+ memo [ 0 ] [ j ] = memo [ 0 ] [ j - 1 ] + 1 ;
24+ }
25+ }
26+
27+ for ( let i = 1 ; i < n ; i ++ ) {
28+ for ( let j = 1 ; j < m ; j ++ ) {
29+ if ( str1 [ i ] === str2 [ j ] ) {
30+ memo [ i ] [ j ] = Math . min ( memo [ i - 1 ] [ j ] + 1 , memo [ i ] [ j - 1 ] + 1 , memo [ i - 1 ] [ j - 1 ] ) ;
31+ } else {
32+ memo [ i ] [ j ] = Math . min ( memo [ i - 1 ] [ j ] + 1 , memo [ i ] [ j - 1 ] + 1 , memo [ i - 1 ] [ j - 1 ] + 1 ) ;
33+ }
34+ }
35+ }
36+ console . log ( memo ) ;
37+
38+ return memo [ n - 1 ] [ m - 1 ] ;
39+ }
40+
41+
42+ var s = "mitcmu" ;
43+ var t = "mtacnu" ;
44+
45+ console . log ( lsDist ( s , t ) ) ;
46+
47+ var s = "kitten" ;
48+ var t = "sitting" ;
49+
50+ console . log ( lsDist ( s , t ) ) ;
51+
52+ var s = "flaw" ;
53+ var t = "lawn" ;
54+ console . log ( lsDist ( s , t ) ) ;
Original file line number Diff line number Diff line change 44
55def levenshtein_dp (s : str , t : str ) -> int :
66 m , n = len (s ), len (t )
7- table = [[0 ] * (n + 1 ) for _ in range (m + 1 )]
8- table [0 ] = [j for j in range (m + 1 )]
9- for i in range (m + 1 ):
10- table [i ][0 ] = i
11- for i in range (1 , m + 1 ):
12- for j in range (1 , n + 1 ):
13- table [i ][j ] = min (1 + table [i - 1 ][j ], 1 + table [i ][j - 1 ], int (s [i - 1 ] != t [j - 1 ]) + table [i - 1 ][j - 1 ])
7+ table = [[0 ] * (n ) for _ in range (m )]
8+
9+ for i in range (n ):
10+ if s [0 ] == t [i ]:
11+ table [0 ][i ] = i - 0
12+ elif i != 0 :
13+ table [0 ][i ] = table [0 ][i - 1 ] + 1
14+ else :
15+ table [0 ][i ] = 1
16+
17+ for i in range (m ):
18+ if s [i ] == t [0 ]:
19+ table [i ][0 ] = i - 0
20+ elif i != 0 :
21+ table [i ][0 ] = table [i - 1 ][0 ] + 1
22+ else :
23+ table [i ][0 ] = 1
24+
25+ for i in range (1 , m ):
26+ for j in range (1 , n ):
27+ table [i ][j ] = min (1 + table [i - 1 ][j ], 1 + table [i ][j - 1 ], int (s [i ] != t [j ]) + table [i - 1 ][j - 1 ])
28+
29+ print (table )
1430 return table [- 1 ][- 1 ]
1531
1632
@@ -27,5 +43,17 @@ def common_substring_dp(s: str, t: str) -> int:
2743 s = "mitcmu"
2844 t = "mtacnu"
2945
46+ print (levenshtein_dp (s , t ))
47+ print (common_substring_dp (s , t ))
48+
49+ s = "kitten"
50+ t = "sitting"
51+
52+ print (levenshtein_dp (s , t ))
53+ print (common_substring_dp (s , t ))
54+
55+ s = "flaw"
56+ t = "lawn"
57+
3058 print (levenshtein_dp (s , t ))
3159 print (common_substring_dp (s , t ))
You can’t perform that action at this time.
0 commit comments