publicclassSolution{ /** * 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整型 */ publicintminEditCost(String str1, String str2, int ic, int dc, int rc){ // write code here int n = str1.length(); int m = str2.length();
// 有一个字符串为空串 if (n * m == 0) { return Math.max(n,m)*Math.min(dc,rc); }
// DP 数组 int[][] D = newint[n + 1][m + 1];
// 边界状态初始化 for (int i = 0; i < n + 1; i++) { D[i][0] = i*dc; } for (int j = 0; j < m + 1; j++) { D[0][j] = j*ic; }
// 计算所有 DP 值 for (int i = 1; i < n + 1; i++) { for (int j = 1; j < m + 1; j++) { int left = D[i - 1][j] + dc; int down = D[i][j - 1] + ic; int left_down = D[i - 1][j - 1]; if (str1.charAt(i - 1) != str2.charAt(j - 1)) { left_down += rc; } D[i][j] = Math.min(left, Math.min(down, left_down)); } } return D[n][m]; } }