编辑距离问题(Edit distance)是指通过插入、删除、替换操作将一个字符串转换成另一个字符串,使得两个字符串的距离最小。这是一个经典的动态规划问题。
下面是Python代码示例:
def minDistance(word1: str, word2: str) -> int:
m, n = len(word1), len(word2)
# state initialization
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(m + 1):
dp[i][0] = i
for j in range(n + 1):
dp[0][j] = j
# state transition
for i in range(1, m + 1):
for j in range(1, n + 1):
if word1[i - 1] == word2[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
return dp[-1][-1]
在这个示例中,dp[i][j]表示将第一个字符串的前i个字符转换为第二个字符串的前j个字符所需的最小编辑距离。
状态初始化:dp[i][0]表示将第一个字符串的前i个字符转换为空串的编辑距离,显然等于i;dp[0][j]表示将空串转换为第二个字符串的前j个字符的编辑距离,显然等于j。
状态转移:对于dp[i][j],如果第一个字符串的第i个字符等于第二个字符串的第j个字符,则不需要进行任何编辑操作,因此dp[i][j]等于dp[i-1][j-1];否则,需要进行替换、插入或删除操作使得第