题解 | #计算字符串的编辑距离#

计算字符串的编辑距离

https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 保存第一个字符串数组
const arr1 = []
// 保存第二个字符串数组
const arr2 = []
let row = 0 


rl.on('line', function (line) {
    row++
    if(row === 1){
        arr1.push(...line.split(''))
    }else {
        arr2.push(...line.split(''))
        // 保存画图二维数组,就是以两字符串为两边尽心画图
        const dp = new Array(arr1.length + 1).fill(0).map(()=>new Array(arr2.length+1).fill(0))
        // 给第一行赋值
        for(let i = 0; i < dp[0].length; i++){
            dp[0][i] = i
        }
        // 给第一列赋值
        for(let j = 0; j < dp.length; j++){
            dp[j][0] = j
        }

        // 这里就是填充二维数组了
        for(let i = 1; i < dp.length; i++){
            for(let j = 1; j < dp[0].length; j++){
                // 如果两个字符串相下标处的字符一样,因为i、j是从1开始的,但是我们两个字符串是从0开始的,所以
                // 这里是 i - 1 == j-1
                if(arr1[i-1] === arr2[j-1]){
                    // 这里因为第一行与第一列在上面已经赋值,所以,从i、j  为1开始
                    dp[i][j] = dp[i-1][j-1]
                }else {
                    // 取斜上方、上方、左边三值的最小值、然后加1
                    dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1
                }
            }
        }
        
        console.log(dp[arr1.length][arr2.length])

    }
});

全部评论

相关推荐

12-04 22:31
武汉大学 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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