最小编辑代价-动态规划
最小编辑代价
http://www.nowcoder.com/questionTerminal/05fed41805ae4394ab6607d0d745c8e4
public int minEditCost (String str1, String str2, int ic, int dc, int rc) {
// write code here
int len1 = str1.length(), len2 = str2.length();
int[][] dp = new int[len1+1][len2+1];
// 计算编辑的最小次数
// for (int i=0;i<=len1;++i){
// for (int j=0;j<=len2;++j){
// if (i == 0 || j == 0){
// dp[i][j] = Math.max(i, j);
// }else{
// if (str1.charAt(i-1) == str2.charAt(j-1)){
// dp[i][j] = Math.min(Math.min(dp[i][j-1], dp[i-1][j])+1, dp[i-1][j-1]);
// }else{
// dp[i][j] = Math.min(Math.min(dp[i][j-1], dp[i-1][j])+1, dp[i-1][j-1]+1);
// }
// }
// }
// }
// 计算编辑的最小代价
for (int i=0;i<=len1;++i){
for (int j=0;j<=len2;++j){
if (i == 0){
dp[i][j] = j*ic;
}else if (j == 0){
dp[i][j] = i*dc;
}else{
if (str1.charAt(i-1) == str2.charAt(j-1)){
dp[i][j] = Math.min(Math.min(dp[i][j-1]+ic, dp[i-1][j]+dc), dp[i-1][j-1]);
}else{
dp[i][j] = Math.min(Math.min(dp[i][j-1]+ic, dp[i-1][j]+dc), dp[i-1][j-1]+rc);
}
}
}
}
return dp[len1][len2];
}