莱文斯顿距离(python版)

该博客介绍了如何利用动态规划解决LeetCode No.72题,即计算两个单词之间的最小编辑距离。通过创建一个二维数组,根据字符是否相同设置不同状态转移方程,逐步求得从word1转换到word2所需的最少操作数。例如,计算'kitten'到'sitting'的距离,最终得出的结果是3。提供的Python代码实现了这一算法并进行了测试。
摘要由CSDN通过智能技术生成

莱文斯顿距离(python版)

leetcode No.72

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符

示例:

输入:word1 = “intention”, word2 = “execution”
输出:5
解释:
intention -> inention (删除 ‘t’)
inention -> enention (将 ‘i’ 替换为 ‘e’)
enention -> exention (将 ‘n’ 替换为 ‘x’)
exention -> exection (将 ‘n’ 替换为 ‘c’)
exection -> execution (插入 ‘u’)

首先,使用动态规划思想,首先创建一个二维数组subset,长度为len(word2) + 1,宽度为len(word1) + 1,二维数组中的每一个位置用来记录每一步的最小距离。其中第一行表示word1为空字符串,并依次从空字符串变成word2(依次插入);第一列表示word2为空字符串,并依次从word1变成空字符串(依次删除)。根据上面已知条件对数组进行初始化赋值。

然后,按照以下条件依次对二位数组中的每个位置(row, column)进行赋值:
(1)当word1[row - 1] != word2[column - 1]时,subset[row][column] 的取值等于该位置左方、上方、左上方距离为1的位置的最小值加1,即
subset[row][column] = min(subset[row - 1][column - 1], subset[row - 1][column], subset[row][column - 1]) + 1
(2)当word1[row - 1] == word2[column - 1]时,subset[row][column] 的取值等于该位置左上方的值,可以理解为由于字符相等编辑距离无需加1操作,即当前最小距离等于同时删除word1以及word2的当前字符的最小距离(左上方距离为1处的值)。

下面解释一下二维数组中的移动方向分别表示的意义:

  1. 表示删除word1的当前字符操作(距离+1)
  2. 表示插入word2的当前字符操作(距离+1)
  3. 表示将当前word1的字符替换为word2的当前字符(距离+1)
  4. 可以理解为当前word2的字符与当前word1的字符相同时,同时将这两个字符删除(距离维持不变)

举例,word1=kitt

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值