给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/edit-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案:
- 使用动态规划
- 使用二维dp数组
- 一般式 dp[i][j]表示A的前i个字符和B的前j个字符匹配的最少操作数
- 特殊的,dp[0][j]表示A为空字符串,与B和B的前j个字符匹配的最少操作数,就是j,因为需要增加j个字符。dp[i][0]同理。
- 写状态转移方程
dp[i][j] = ?
如果A[i] == B[i],那么等于dp[i-1][j-1]?不等+1
如果dp[i][j-1],给A增加一个B[j]字符,比dp[i-1][j-1]要小的话,那么dp[i][j]=dp[i][j-1]+1;
同理,可得dp[i-1][j],给B增加一个A[i],dp[i][j]=dp[i-1][j]+1;
所以这三者比较大小
- (A[i] == B[i] ) ? dp[i - 1][j - 1] : dp[i - 1][j - 1]+1
- dp[i][j - 1] + 1
- dp[i][j] = dp[i - 1][j] + 1
class Solution {
public int minDistance(String word1, String word2) {
int[</