class Solution(object):
dp=[]
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
self.dp=[[-1 for i in range(len(word2)+1)]for j in range(len(word1)+1)]
return self.dfs(word1,word2)
def dfs(self, word1, word2):
Lenword1=len(word1)
Lenword2=len(word2)
#print Lenword1,Lenword2
if self.dp[Lenword1][Lenword2]!=-1:return self.dp[Lenword1][Lenword2]
if word1==word2:
self.dp[Lenword1][Lenword2]=0
return 0
if Lenword1==0 or Lenword2==0:return abs(Lenword1-Lenword2)
Len=min(Lenword1,Lenword2)
p=-1
for i in range(Len):
if word1[i]==word2[i]:
p=i
else:
break
if p!=-1:
nextword1=word1[p+1:]
nextword2=word2[p+1:]
Len1=len(nextword1)
Len2=len(nextword2)
self.dp[Len1][Len2]=self.dfs(nextword1,nextword2)
return self.dp[Len1][Len2]
replace=1+self.dfs(word1[1:],word2[1:])
insert=1+self.dfs(word1,word2[1:])
delete=1+self.dfs(word1[1:],word2)
self.dp[Lenword1][Lenword2]=min(min(replace,insert),delete)
return self.dp[Lenword1][Lenword2]