-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path72. Edit Distance.py
More file actions
34 lines (29 loc) · 942 Bytes
/
72. Edit Distance.py
File metadata and controls
34 lines (29 loc) · 942 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution:
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
n = len(word1)
m = len(word2)
# if one of the strings is empty
if n * m == 0:
return n + m
# array to store the convertion history
d = [ [0] * (m + 1) for _ in range(n + 1)]
# init boundaries
for i in range(n + 1):
d[i][0] = i
for j in range(m + 1):
d[0][j] = j
# DP compute
for i in range(1, n + 1):
for j in range(1, m + 1):
left = d[i - 1][j] + 1
down = d[i][j - 1] + 1
left_down = d[i - 1][j - 1]
if word1[i - 1] != word2[j - 1]:
left_down += 1
d[i][j] = min(left, down, left_down)
return d[n][m]