Leetcode583
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
本题就是在最长公共子序列的基础上做了一个减法,求需要删除操作的次数。
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.size(), n = word2.size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
for(int i = 1; i <= m; i++){
char c1 = word1[i-1];
for(int j = 1; j <= n; j++){
char c2 = word2[j-1];
if(c1 == c2){
dp[i][j] = dp[i - 1][j - 1] + 1;
}else{
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
int len = dp[m][n];//从这往上是求最长公共子序列的长度
return m - len + n - len;
}
};