推荐解读up链接如下
【ACM 金牌选手教你动态规划的本质。力扣 No.72 编辑距离,真·动画教编程,适合语言初学者或编程新人。-哔哩哔哩】 https://b23.tv/mZIMAaQ
int editDistance(string str1, string str2) {
int n1 = str1.length();
int n2 = str2.length();
//dp[i][i],初始化全为0
vector<vector<int>>dp(n1+1, vector<int>(n2+1, 0));
//初始化边界
for(int i=1; i <= n1; i++)
{
dp[i][0] = dp[i-1][0] + 1;
}
for(int j=1; j <= n2; j++)
{
dp[0][j] = dp[0][j-1] + 1;
}
//第一个字符串
for(int i=1; i<=n1; i++)
{
//第二个字符串
for(int j=1; j<= n2; j++){
//若是字符相同,此处不用编辑
if(str1[i - 1] == str2[j - 1])
{
dp[i][j] = dp[i - 1][j - 1];
}
else
{
dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;
}
}
}
return dp[n1][n2];
}