题目描述:
标签:字符串
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
代码:
思路分析:动态规划五部曲
1、找到公共最长子序列。具体思路详见 1143最长公共子序列
2、找到最长公共子序列之后,就用 两个字符串的总长度-2*最长公共子序列的长度 就能得到要删除的步数
class Solution {
public int minDistance(String word1, String word2) {
int len1 = word1.length();
int len2 = word2.length();
int[][] dp = new int[len1+1][len2+1];
for(int i = 1;i <= len1;i++){
for(int j = 1;j <= len2;j++){
if(word1.charAt(i-1) == word2.charAt(j-1)){
dp[i][j] = dp[i-1][j-1] + 1;
}else{
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return (len1 - dp[len1][len2]) + (len2 - dp[len1][len2]);
}
}