72. 编辑距离
难度困难1080
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 1:
输入:word1 = "horse", word2 = "ros" 输出:3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')
public int minDistance(String word1, String word2) {
int m = word1.length(), n = word2.length();
int [][] dp = new int [m+1][n+1];
for (int i=0;i<=m;i++) {
dp[i][0] = i;
}
for (int j=0;j<=n;j++) {
dp[0][j] = j;
}
for (int i=1;i<=m;i++) {
for (int j=1;j<=n;j++) {
if (word1.charAt(i-1) == word2.charAt(j-1)) {
dp[i][j] = dp[i-1][j-1];
} else {
dp[i][j] = 1+Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]);
}
}
}
return dp[m][n];
}
}
// a.状态定义 DP[i][j] word1 word2
// b.dp方程
// if w1[i] == w2[j] dp[i-1,j-1]
// else i d r 1+min(dp[i-1,j],dp[i,j-1],dp[i-1,j-1]);