题解 | #最小编辑代价#

最小编辑代价

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
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务