一文看懂 编辑距离(Edit Distance) 动态规划算法详解 JS代码实现

最近看了一下别人的面试博客中提到了编辑距离的算法,才发现LeetCode中 这道题的难度已经从困难变成了中等,真是应了那句 “学如逆水行舟,不进则退” , 想当初一杯茶,一包烟,一道困难看一天,没想到如今能把这道题卷成中等

话不多说今天分享一下我对这道题的一些理解

        ''  r   o   s
    ''  0   1   2   3
    h   1   1   2   3
    o   2   2   1   2
    r   3   2   2   2
    s   4   3   3   2
    e   5   4   4   3

先看一下这个矩阵
我们假设 word1 = 'horse' word2 = 'ros'

第一行表示 从一个空字符串到 字符串 ‘ros’ 所需要的最小步骤 也就是 3

第一列表示 从空字符串到 字符串 ‘horse’ 所需要的最小步骤 也就是 5

每个单元格都表示 word1的前 i 个字符 转换成 word2 的前 j 个字符所需要的最小操作数

根据当前字符是否相等,来判断当前字符是否可以不需要操作,还是需要通过 替换 删除 插入来操作

可能说的有点抽象,举个例子来说

比如我想将 ‘horse’ 的前两个字符 ‘ho’ 转换成 ‘ros’ 的前三个字符

首先,我们定义 dp[i][j] 为字符串 word1 的前 i 个字符和字符串 word2 的前 j 个字符之间的最小编辑距离

‘ho’ 转换成 ‘ros’ ,在单元格中就是(2,3)单元格,此单元格就是记录 dp[2][3] 的最小距离,值是2

说明: 这里的 (2,3) 单元格 不是第二行第三列 可以看做 2 3 是数组下标 所以是 第三行第四列 因为矩阵中我们还包含了空字符串的情况 下面的单元格都是如此 看作下标 + 1即可

那么 距离2 是怎么得来的呢

首先我们 假设 每个单元格都记录着word1 前 i 个字符转换成 word2 前 j 个字符的最小距离

什么意思呢 举个例子(1,1)表示 ‘h’ 转换成 ‘r’ 的最小距离,(1,2)表示 ‘h’ 转换成 ‘ro’ 的最小距离,

(1,3)表示 ‘h’ 转换成 ‘ros’ 的最小距离,以此类推 (我们先假设这样,后面会验证)

现在我们想填充单元格 (2,3)的值,我们首先需要判断 当前 word1的 ‘ho’ 和 word2的 ‘ros’ 的最后一个字符串是否相同
如果不相同,那就需要通过 替换 删除 插入 来操作word1

我们首先看一下 (2,2)单元格,上面我们假设了每个单元格都记录着word1 前 i 个字符转换成 word2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值