问题描述:
iven two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string.
示例:
Input: "sea", "eat" Output: 2 Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea".
问题分析:
本题实质上是求两个字符串的最长公共子序列,我们可利用经典的动态规划求解,设置状态转移矩阵dp,dp[i][j]表示字串word1.substr(0,i) 和word2.substr(0,j)之间的最长公共子串。
过程详见代码:
class Solution {
public:
int minDistance(string word1, string word2) {
vector<vector<int>> dp(word1.length() + 1, vector<int>(word2.length() + 1,0));
for (int i = 1; i <= word1.length(); i++)
{
for (int j = 1; j <= word2.length(); j++)
{
dp[i][j] = (word1[i- 1] == word2[j - 1]) ? dp[i - 1][j - 1] + 1 : max(dp[i - 1][j], dp[i][j - 1]);
}
}
return word2.length() + word1.length() - 2 * dp[word1.length()][word2.length()];
}
};