思路
就是加一个判断,如果满足交换,则尝试交换(即:word1[i] = word2[j - 1] and word1[i - 1] = word2[j] ),不满足的话则退化传统的3种操作
class Solution:
@staticmethod
def minDistance( word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
本思路采用动态规划
"""
len_word1=len(word1)
len_word2=len(word2)
dp=[]
for row in range(len_word1+1):
this_tmp=[]
for col in range(len_word2+1):
if row==0:
this_tmp.append(col)
elif col==0:
this_tmp.append(row)
else:
this_tmp.append(False)
dp.append(this_tmp)
# print(dp)
for i in range(1,len_word1+1):
for j in range(1,len_word2+1):
if word1[i] = word2[j]:
d[i, j] := d[i-1, j-1]
elif i > 0 and j > 0 and word1[i] = word2[j - 1] and word1[i - 1] = word2[j] :
d[i, j] := min(
d[i-2, j-2] + 1 // transpose
d[i-1, j] + 1, // deletion
d[i, j-1] + 1, // insertion
d[i-1, j-1] + 1 // substitution
)
else:
d[i, j] := min(
d[i-1, j] + 1, // deletion
d[i, j-1] + 1, // insertion
d[i-1, j-1] + 1 // substitution
)
return dp[len_word1][len_word2]