题解
dp 动态规划 很经典的一道题目
dp[i][j] 表示 word1 到 i 位置转换为 word2 到 j 位置的最小步数
当 word1[i] == word2[j] 时,dp[i][j] = dp[i-1][j-1]
当 word1[i] != word2[j] 时,dp[i][j] = min(dp[i - 1][j - 1] , dp[i-1][j],dp[i][j-1]) + 1
其中还包含初始化操作
当word2字符串为空,word1变为word2只需要删除当时存在的字符即可
当word1字符为空时,word1变为word2只需要插入当时存在的字符即可
代码
class Solution {
public:
int minDistance(string word1, string word2) {
int n = word1.length();
int m = word2.length();
if(n == 0 || m == 0){//如果有一个字符串为空
return max(m,n);
}
int dp[n + 1][m + 1];
for(int i = 0; i < n + 1; i++){
dp[i][0] = i;
}
for(int j = 0; j < m + 1; j++){
dp[0][j] = j;
}
for(int i = 1; i < n + 1; i++){
for(int j = 1; j < m + 1; j++){
int left = dp[i - 1][j] + 1;
int down = dp[i][j - 1] + 1;
int left_down = dp[i-1][j-1];
if(word1[i - 1] != word2[j - 1]){
left_down += 1;
}
dp[i][j] = min(left,min(down,left_down));
}
}
return dp[n][m];
}
};