艾恩凝
个人博客 https://aeneag.xyz/
公众号 技术乱舞
2021/10/13
题目
https://leetcode-cn.com/problems/edit-distance/
题目分析
初看无从下手,一看答案,恍然大悟,又是废物的一天,利用动态规划
填写上面的表格
蓝色位置填的就是上面红色部分圈住的最小值加1
当然还有一种情况就是 当前dp[i][j],如果最后一个 两个字母值相同 比如 ro ho 所以 步数直接看dp[i-1][j-1]
题解
//author : Aen
//blog : https://aeneag.xyz
//公众号 : 技术乱舞
class Solution {
public:
int minDistance(string word1, string word2) {
int row = word1.size(),col = word2.size();
vector<vector<int>> dp(row+1,vector<int>(col+1));
for(int i = 0 ; i <= row ; ++i)dp[i][0] = i;
for(int i = 0 ; i <= col ; ++i)dp[0][i] = i;
for(int i = 1 ; i <= row ; ++i){
for(int j = 1 ; j <= col ; ++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-1][j-1],dp[i][j-1]))+1;
}
}
}
return dp[row][col];
}
};