难度:中等。
标签:字符串。
使用动态规划做,使用
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示word1的前
i
i
i个字符和word2的前
j
j
j个字符的删除最小次数。
如果不知道怎么变化,用个例子试一下就行。
正确解法:
class Solution {
public:
int minDistance(string word1, string word2) {
int n1 = word1.length(), n2 = word2.length();
vector<vector<int>> dp(n1 + 1);
for(int i = 0; i <= n1; i++){
dp[i].resize(n2 + 1);
dp[i][0] = i;
}
for(int i = 1; i <= n2; i++)dp[0][i] = i;
for(int i = 1; i <= n1; i++){
for(int j = 1; j <= n2; j++){
int k = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);
if(word1[i - 1] == word2[j - 1]){
dp[i][j] = min(k, dp[i - 1][j - 1]);
}
else{
dp[i][j] = min(k, dp[i - 1][j - 1] + 2);
}
}
}
return dp[n1][n2];
}
};
结果: