题解 | #最小编辑代价#
最小编辑代价
http://www.nowcoder.com/practice/05fed41805ae4394ab6607d0d745c8e4
/** * 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整型 */ function minEditCost( str1 , str2 , ic , dc , rc ) { // write code here /** 动态规划 */ // 状态: dp[i][j] // 状态转移:当str1[i] !== str2[j] dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+1) // 当str1[i] === str2[j] dp[i][j] = dp[i-1][j-1] const l1 = str1.length+1; const l2 = str2.length+1; const dp = new Array(l1).fill(0).map(() => new Array(l2).fill(0)); for (let i=0; i<l2; i++) { dp[0][i] = i*ic; } for (let i=0; i<l1; i++) { dp[i][0] = i*dc; } for (let i=1; i<l1; i++) { for (let j=1; j<l2; j++) { if (str1[i-1] === str2[j-1]) { dp[i][j] = dp[i-1][j-1]; } else { const del= dp[i-1][j] + dc const insert = dp[i][j-1] + ic const replace = dp[i-1][j-1] + rc dp[i][j] = Math.min(del, insert, replace) } } } return dp[l1-1][l2-1] } module.exports = { minEditCost : minEditCost };