#include <vector>
class Solution {
public:
/**
* dp[i][j] str1[1]——[i] str2[1]——[j]的操作数
* 1.str1 str2 的长度差每增加一个,操作数加一个
* 2.不同的修改操作+1,否则保持
* @param str1 string字符串
* @param str2 string字符串
* @return int整型
*/
int editDistance(string str1, string str2) {
// write code here
int len1=str1.length();
int len2=str2.length();
vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));
// 1.str1 str2 的长度差每增加一个,操作数加一个
//这里极端情况,str1=0 or str2=0
for(int i=1;i<=len1;i++)
dp[i][0]=dp[i-1][0]+1;
for(int i=1;i<=len2;i++)
dp[0][i]=dp[0][i-1]+1;
//相同的保持,不同的修改操作+1
for(int i=1;i<=len1;i++){
for (int j=1; j<=len2; j++) {
if(str1[i-1]==str2[j-1]){
dp[i][j]=dp[i-1][j-1];
}else {
//前一个最少操作的状态
//修改 dp[i-1][j-1]
//增加 dp[i-1][j]
//删除 dp[i-1][j]
dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
}
}
}
return dp[len1][len2];
}
};