"""
dp[i, j] = мин ко-во действий
do[1, 1]
dp[i, j] = | a == b => dp[i, j] = dp[i - 1][j - 1]
| a != b. => 1 + dp[i - 1][j]
1 + dp[i][j - 1]
1 + dp[i - 1][j - 1]
'' hob
'' aro
dp[3][2] = hor => ro
''
h
ho
hor
hors
horse
ros => ''
0 1 2 3 4 5
'' h o r s e
0 '' 0 1 2 3 4 5
1 r 1 1 2 2 3 4
2 o 2 2 1 2 3 4
3 s 3 4 2 2 2 3
"""
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
dp = [[0 for i in range(len(word2) + 1)]
for j in range(len(word1) + 1)]
for i in range(len(dp)):
dp[i][0] = i
for j in range(len(dp[0])):
dp[0][j] = j
for i in range(1, len(word1) + 1):
for j in range(1, len(word2) + 1):
if word1[i - 1] == word2[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(1 + dp[i][j - 1], 1 + dp[i - 1][j], 1 + dp[i - 1][j - 1])
return dp[-1][-1]