题目描述
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。
示例
思路
其实这道题的思路和最长公共子序列的思路一致,本题让我们求word1 和 word2 相同所需的最小步数,也就是说求word1和word2变成它两的最长公共子序列的步数,那么我们可以求出它两的最长公共子序列,然后,分别用它们各自的长度减去子序列长度就是所求。
代码如下
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 = 1;i < dp.length;i++){
for(int j = 1;j < dp[0].length;j++){
if(word1.charAt(i - 1) == word2.charAt(j - 1)){
dp[i][j] = 1 + dp[i - 1][j - 1];
}else{
dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]);
}
}
}
return m + n - 2 * dp[m][n];
}