编辑距离(一)

编辑距离(一)

https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da?tpId=295&tqId=2294660&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

代码

/**
 * @param str1 string字符串
 * @param str2 string字符串
 * @return int整型
 */
function editDistance(str1, str2) {
    // write code here
    const m = str1.length,
        n = str2.length;
    // dp[i][j] 表示,str2 的首字母到 i ,str1 的首字母到 j 的编辑距离
    const dp = new Array(n + 1).fill(1).map(() => new Array(m + 1).fill(0));
    // 行初始化,str1 首字母为空字符串时,编辑距离为上一次的编辑距离 + 1
    // 也就是上一个 str2 字符所在下标 i - 1 的编辑距离 + 1
    for (let i = 1; i <= n; i++) {
        dp[i][0] = dp[i - 1][0]; // 也可以直接写 i,为了理解清 dp[i][j] 的含义这里采用 dp[i - 1][0]
    }
    // 列的初始化类似行初始化,str2 的首字母为空字符串时,相对于 str1 当前位置 j 的编辑距离
    for (let j = 1; j <= m; j++) {
        dp[0][j] = dp[0][j - 1]; // j
    }
    for (let i = 1; i <= n; i++) {
        for (let j = 1; j <= m; j++) {
            if (str2[i - 1] === str1[j - 1])
                // 不需要编辑,直接选取回退当前两个字符的情况
                // 两个字符相同,这多出来的字符就不用操作,操作次数与两个子串的前一个相同
                // 因此有dp[i][j]=dp[i−1][j−1]dp[i][j] = dp[i - 1][j - 1]dp[i][j]=dp[i−1][j−1]
                dp[i][j] = dp[i - 1][j - 1];
            else {
                // 需要编辑,从前面中选取最小的加以编辑
                // 递推公式应该由状态转移到的情况得出:
                // 两个字符不相同,那么这两个字符需要编辑
                // 但是此时的最短的距离不一定是由修改子串得出,也有可能是删除某个字符或者增加某个字符
                // 因此我们选取这三种情况的最小值增加一个编辑距离
                // 即,dp[i][j]=min(dp[i−1][j−1],min(dp[i−1][j],dp[i][j−1]))+1
                dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1;
            }
        }
    }
    // 拿到下标为 m , n 的编辑距离,总的编辑距离有前面各个子编辑距离得出
    return dp[n][m];
}
全部评论

相关推荐

hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
头像
11-03 16:48
已编辑
百度_高级研发工程师
事实是检验真理的唯一标准。&nbsp;无论我们怎么去说,去讲述,去证明,都抵不过一个offer来得实在,无论我们怎么去复现求职中的摸爬滚打、扒皮抽筋、狼狈不堪,都抵不过你在简历写上大厂的名字(外包不算)。&nbsp;所以在我求职期间,我什么话都不说,什么话都不讲,因为没有意义,虽然我总讲过程才是意义,但只有当你上岸的那一刻,你才有资格回想在水里的挣扎,只有等你出了山,你才知道山的全貌。&nbsp;我为什么一定要离开华为OD,难道它不稳定吗,不能赚钱吗。为了证明自己,那肯定有的。其实更多的是印证我的认知是否真的正确。&nbsp;(给不了解我的人交代一下背景,在下双非一本,gap一年,华为OD外包,摸爬滚打4个月,艰难上岸百度正编)一、...
先锋战士:说得很真诚。鄙视链自古有之,学历,家庭背景,财富,权利。从小有之,小学羡慕那些当班委的,中学羡慕那些学生会的,高中羡慕尖子班拿教学金的,大学羡慕高绩点,毕业了羡慕进大厂的。工作了,又羡慕高职级的,再后来又羡慕别人早早结婚的。我想表达的观点很简单,无论是华为od还是百度,都是经历,没有孰高孰低,为了抵达下一个风景,总会付出更多东西,但不就是人生吗?正如登山,每个阶段的山,都要想办法攀登,在博主的文字中,见到了坚持和积极寻找问题解决办法的心态
学历对求职的影响
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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