动态规划:
首先生成一个大小为(M+1)X(N+1)的矩阵dp,dp[i][j]的值代表str1[0..i-1]编辑成str2[0..j-1]的最小代价。
public int minEditCost (String str1, String str2, int ic, int dc, int rc) {
// write code here
if (str1 == null || str2 == null){
return 0;
}
char[] cs1 = str1.toCharArray();
char[] cs2 = str2.toCharArray();
int row = cs1.length + 1;
int col = cs2.length + 1;
int[][] dp = new int[row][col];
for (int i = 0; i < row; i++) {
dp[i][0] = dc * i;
}
for (int i = 0; i < col; i++) {
dp[0][i] = ic * i;
}
for (int i = 1; i < row; i++) {
for (int j = 1; j < col; j++) {
if (cs1[i-1] == cs2[j-1]){
dp[i][j] = dp[i-1][j-1];
}else {
dp[i][j] = dp[i-1][j-1] + rc;
}
dp[i][j] = Math.min(dp[i][j], dp[i][j-1] + ic);
dp[i][j] = Math.min(dp[i][j], dp[i-1][j] + dc);
}
}
return dp[row-1][col-1];
} 


京公网安备 11010502036488号