1
1
class Solution :
2
2
def minimumDeleteSum (self , s1 : str , s2 : str ) -> int :
3
- def helper (i , j ):
4
- if i == n :
5
- return sum (ord (s2 [k ]) for k in range (j , m ))
6
- if j == m :
7
- return sum (ord (s1 [k ]) for k in range (i , n ))
3
+ n , m = len (s1 ), len (s2 )
4
+ dp = [[0 ]* (m + 1 ) for _ in range (n + 1 )]
5
+
6
+ for i in range (n ):
7
+ dp [i ][m ] = sum (ord (s1 [k ]) for k in range (i , n ))
8
+ for j in range (m ):
9
+ dp [n ][j ] = sum (ord (s2 [k ]) for k in range (j , m ))
10
+ for i in range (n - 1 , - 1 , - 1 ):
11
+ for j in range (m - 1 , - 1 , - 1 ):
12
+ if s1 [i ] == s2 [j ]:
13
+ dp [i ][j ] = dp [i + 1 ][j + 1 ]
14
+ else :
15
+ rems1 = ord (s1 [i ])+ dp [i + 1 ][j ]
16
+ rems2 = ord (s2 [j ])+ dp [i ][j + 1 ]
17
+ dp [i ][j ] = min (rems1 , rems2 )
18
+ return dp [0 ][0 ]
19
+
20
+
21
+
22
+ # def helper(i, j):
23
+ # if i==n:
24
+ # return sum(ord(s2[k]) for k in range(j, m))
25
+ # if j==m:
26
+ # return sum(ord(s1[k]) for k in range(i, n))
8
27
9
- if dp [i ][j ] != - 1 :
10
- return dp [i ][j ]
28
+ # if dp[i][j] != -1:
29
+ # return dp[i][j]
11
30
12
- if s1 [i ] == s2 [j ]:
13
- dp [i ][j ] = helper (i + 1 , j + 1 )
14
- return dp [i ][j ]
15
- else :
16
- rems1 = ord (s1 [i ])+ helper (i + 1 , j )
17
- rems2 = ord (s2 [j ])+ helper (i , j + 1 )
18
- dp [i ][j ] = min (rems1 , rems2 )
19
- return dp [i ][j ]
31
+ # if s1[i] == s2[j]:
32
+ # dp[i][j] = helper(i+1, j+1)
33
+ # return dp[i][j]
34
+ # else:
35
+ # rems1 = ord(s1[i])+helper(i+1, j)
36
+ # rems2 = ord(s2[j])+helper(i, j+1)
37
+ # dp[i][j] = min(rems1, rems2)
38
+ # return dp[i][j]
20
39
21
- n , m = len (s1 ), len (s2 )
22
- dp = [[- 1 ]* m for _ in range (n )]
23
- return helper (0 , 0 )
40
+ # n, m = len(s1), len(s2)
41
+ # dp = [[-1]*m for _ in range(n)]
42
+ # return helper(0, 0)
0 commit comments