Leetcode 583. 两个字符串的删除操作
题目:583. 两个字符串的删除操作
解析:代码随想录解析
解题思路
dp数组的含义是,从word1从0到i-1,word2从0到j-1匹配上最少需要删除多少个字符
代码
class Solution {
public int minDistance(String word1, String word2) {
int m = word1.length();
int 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] = Math.min(dp[i][j-1] + 1 , Math.min(dp[i-1][j] + 1, dp[i-1][j-1] + 2));
}
}
return dp[m][n];
}
}
总结
暂无
Leetcode 72. 编辑距离
解题思路
和上面那题的区别是,改了一个dp[i-1][i-1] + 1,因为可以修改,而上一题只能删除两个
代码
class Solution {
public int minDistance(String word1, String word2) {
int m = word1.length();
int 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] = Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1])) + 1;
}
}
return dp[m][n];
}
}
总结
暂无