系列文章目录
前言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
描述
给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。
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 minEditCost(string str1, string str2, int ic, int dc, int rc) {
// write code here
int len1 = str1.size();
int len2 = str2.size();
int dp[len1+1][len2+1];
memset(dp,0,sizeof(dp));
for(int i = 1;i<=len1;i++) dp[i][0] =i*dc; // str2 长度为0,只能删除
for(int i = 1;i<=len2;i++) dp[0][i] = i*ic; // str1 长度为0, 只能插入
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]; //r1[i] = str2[j]
else {
dp[i][j] = min(dp[i-1][j-1]+rc,dp[i][j-1]+ic); //dp[i][j] 取三种措施的最小的代价
dp[i][j] = min(dp[i][j],dp[i-1][j]+dc);
}
}
}
return dp[len1][len2];
}
};