📅  最后修改于: 2023-12-03 15:42:22.348000             🧑  作者: Mango
这是一道关于编辑距离的算法题目,可以考察程序员对于动态规划的理解和应用。
给定两个字符串S和T,求将S转化为T的最小编辑距离。允许的编辑操作包括:
输入:
S = "horse"
T = "ros"
输出:
3
解释:
将S转化为T的最小编辑距离为3,可以通过以下方式实现:
1. 将'h'修改为'r'
2. 删除'r'
3. 删除'e'
这道题可以使用动态规划的思想解决。我们用dp[i][j]表示将字符串S的前i个字符转化为字符串T的前j个字符所需要的最小编辑距离。则当i=0或j=0时,dp[i][j]的值即为i或j,因为此时S或T为空字符串,需要插入或删除相应数量的字符才能得到目标字符串。
当i,j均不为0时,有三种情况:
时间复杂度:$O(n^2)$
代码实现(Python):
def min_edit_distance(S, T):
n, m = len(S), len(T)
dp = [[0] * (m+1) for _ in range(n+1)]
for i in range(n+1):
dp[i][0] = i
for j in range(m+1):
dp[0][j] = j
for i in range(1, n+1):
for j in range(1, m+1):
if S[i-1] == T[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i][j-1]+1, dp[i-1][j]+1, dp[i-1][j-1]+1)
return dp[n][m]