Question
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
Hide Tags Dynamic Programming String
Hide Similar Problems (M) One Edit Distance
Solution
class Solution(object):
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
l1, l2 = len(word1), len(word2)
# res[i][j] means res for the first i elems in word1, and the first j elems in word2
dp, backup = range(l1+1), [0]*(l1+1)
for s2ind in range(1,l2+1):
backup[0] = s2ind
for s1ind in range(1,l1+1):
if word1[s1ind-1]==word2[s2ind-1]:
backup[s1ind] = dp[s1ind-1]
else:
backup[s1ind] = min( backup[s1ind-1], dp[s1ind-1], dp[s1ind]) + 1
dp = backup[:]
return dp[-1]