动态规划
class Solution {
public int minDistance(String word1, String word2) {
/**
* 和《583. 两个字符串的删除操作》一模一样
* 只有一个地方不一样
*/
int[][] dp = new int[word1.length() + 1][word2.length() + 1];
for (int i = 0; i < word1.length() + 1; i++) {
dp[i][0] = i;
}
for (int j = 0; j < word2.length() + 1; j++) {
dp[0][j] = j;
}
for (int i = 1; i < word1.length() + 1; i++) {
for (int j = 1; j < word2.length() + 1; j++) {
if (word1.charAt(i - 1) == word2.charAt(j - 1)){
dp[i][j] = dp[i - 1][j - 1];
}
/**
* 如果不匹配,有三种操作
* 1、删除:dp[i - 1][j] + 1或dp[i][j - 1] + 1
* 2、插入:等效于删除,操作数是一样的
* 3、修改:操作数加1,dp[i - 1][j - 1] + 1
* 最终代码只有这个加1不一样
*/
else {
dp[i][j] = Math.min(dp[i - 1][j] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1));
}
}
}
return dp[word1.length()][word2.length()];
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O(n^2)
*/
https://leetcode-cn.com/problems/edit-distance/