Given 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.
Example 1:
Input: "sea", "eat"
Output: 2
Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea".
Note:
The length of given words won't exceed 500.
Characters in given words can only be lower-case letters.
题意: 两个字符串最少删除多少字符才能相同
解法: 设 dp[i][j] 表示第一个串的前 i - 1 个字符和第二个串的前 j - 1 个字符匹配时, 最少删除的字符个数, 那么先考虑边界情况, dp[i][0] = i, dp[0][j] = j, 当 word1[i - 1] 和 word2[j - 1]不匹配时选择删除贡献更少的那个.
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.size(), n = word2.size();
int dp[m + 1][n + 1] = {0};
for(int j = 1; j <= n; ++j)
dp[0][j] = j;
for(int i = 1; i <= m; ++i){
dp[i][0] = i;
for(int j = 1; j <= n; ++j){
if(word1[i - 1] == word2[j - 1])
dp[i][j] = dp[i - 1][j - 1];
else
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;
}
}
return dp[m][n];
}
};