leetcode583——Delete Operation for Two Strings

题目大意:给出两个字符串,如果每次可以删除一个字母,想使得他们最后完全相同,最少需要多少次删除

分析:动规。典型的LCS问题应用。答案就是两个字符串的长度之和减去两倍的LCS长度。

          状态:dp[i][j]——以字符串1的下标i-1和字符串2的下标j-1结尾的最长公共子串长度

          初始化:dp[i][0]=dp[0][j]=0

          结果:dp[word1.size()][word2.size()]

          状态转移方程:如果word1[i-1]=word2[j-1],那么dp[i][j]=dp[i-1][j-1]+1

                                                                           否则dp[i][j]=max{dp[i-1][j],dp[i][j-1]}

代码:

class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.size();
int n = word2.size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
for (int i = 1;i <= m;i++) {
for (int j = 1;j <= n;j++) {
if (word1[i - 1] == word2[j - 1])  //注意word是从下标0开始的
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
int ans;
ans = m - dp[m][n] + n - dp[m][n];
return ans;
}
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80768545