583. 两个字符串的删除操作
class Solution {
public:
int minDistance(string word1, string word2) {
int len1 = word1.size();
int len2 = word2.size();
int dp[len1 + 1][len2 + 1];
for(int i=0;i<=len1;++i)
dp[i][0] = i;
for(int j=1;j<=len2;++j)
dp[0][j] = j;
for(int i=0;i<len1;++i){
for(int j=0;j<len2;++j){
if(word1[i] == word2[j])
dp[i+1][j+1] = dp[i][j];
else
dp[i+1][j+1] =min( min(dp[i][j+1], dp[i+1][j]) + 1, dp[i][j] + 2);
// cout << i+1 << " " << j+1 << " " << dp[i+1][j+1] << endl;
}
}
return dp[len1][len2];
}
};
72. 编辑距离
class Solution {
public:
int minDistance(string word1, string word2) {
int len1 = word1.size();
int len2 = word2.size();
int dp[len1+1][len2+1];
for(int i=0;i<=len1;++i)
dp[i][0] = i;
for(int j=1;j<=len2;++j)
dp[0][j] = j;
for(int i=1;i<=len1;++i){
for(int j=1;j<=len2;++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], min(dp[i][j-1], dp[i-1][j-1])) + 1;
}
}
return dp[len1][len2];
}
};
650. 只有两个键的键盘
class Solution {
public:
int minSteps(int n) {
int dp[n+1];
dp[1] = 0;
for(int i=2;i<=n;++i){
dp[i] = i;
for(int j=1;j<i;++j){
if(i % j == 0)
dp[i] = min(dp[i], dp[j] + i/j);
}
return dp[n];
}
};