583. 两个字符串的删除操作 - Java 动态规划

Smile_slime_47

原题地址:https://leetcode.cn/problems/delete-operation-for-two-strings

题解

这题实际上是1143. 最长公共子序列 的变种

两个字符串相等实际上就是在求两个字符串的公共子序列,而最少的步数隐含了要求最长公共子序列的条件

我们直接求出两个字符串的公共子序列,然后看看每个字符串删到这个公共子序列需要经过多少步即可

时间复杂度:O(MN)

空间复杂度:O(MN)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public int minDistance(String word1, String word2) {
int[][] dp=new int[word1.length()+1][word2.length()+1];
for(int r=1;r<dp.length;r++){
for(int c=1;c<dp[r].length;c++){
if(word1.charAt(r-1)==word2.charAt(c-1))
dp[r][c]=dp[r-1][c-1]+1;
else
dp[r][c]=Math.max(dp[r][c-1],dp[r-1][c]);
}
}
return word1.length()+word2.length()-2*dp[dp.length-1][dp[0].length-1];
}
}
Comments
On this page
583. 两个字符串的删除操作 - Java 动态规划