面试经典150题 P72 编辑距离
时间轴
2025-12-16
init
题目:
这题和最长公共子序列类似:
设 $dp[i][j]$ 表示将 word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最小操作数。
- 初始化:
word1[0..=i]变为空字符需要 i 次操作,因此 $dp[i][0] = i$- 空字符串变为 word2[0..=j]需要 j 次操作,因此$dp[0][j] = j$
- 对于
dp[i][j], $i,j \ge 1$,有:- 如果
word[i-1]==word[j-1],那么不需要操作,$dp[i][j]=dp[i-1]dp[j-1]$ - 否则 $dp[i][j] = min( dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1] ) + 1$
- $dp[i-1][j]+1$ , 表示删除
word1[i-1] - $dp[i][j-1]+1$ , 表示插入
word2[j-1] - $dp[i-1][j-1]+1$ , 表示替换
word1[i-1]为word2[j-1]
- $dp[i-1][j]+1$ , 表示删除
- 如果
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 常想一二,不思八九!
评论