思路
// i*dc,是因为i++,说明是行增加,s1首字母,s2递增,idx-0时候替换,idx-1之后是删除(dc)
for(int i=0; i<m+1; i++)
dp[i][0] = i*dc;
// 同上
for(int i=0; i<n+1; i++)
dp[0][i] = i*ic;
// 之前都是+1,但是这里的**“代价”**增大了,是加ic,d c
dp[i][j] = Min(dp[i-1][j]+dc, dp[i][j-1]+ic, dp[i-1][j-1]+rc);
代码
class Solution {
public:
/**
* min edit cost
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @param ic int整型 insert cost
* @param dc int整型 delete cost
* @param rc int整型 replace cost
* @return int整型
*/
int Min(int a, int b, int c) {
return min(c, min(a, b));
}
int minEditCost(string str1, string str2, int ic, int dc, int rc) {
int m = str1.size();
int n = str2.size();
vector<vector<int> > dp(m+1, vector<int> (n+1, 0));
// i*dc,是因为i++,说明是行增加,s1首字母,s2递增,idx-0时候替换,idx-1之后是删除(dc)
for(int i=0; i<m+1; i++)
dp[i][0] = i*dc;
for(int i=0; i<n+1; i++)
dp[0][i] = i*ic;
for(int i=1; i<=m; i++) {
for(int j=1; j<=n; 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]+dc, dp[i][j-1]+ic, dp[i-1][j-1]+rc);
}
}
return dp[m][n];
}
};