编辑距离

针对两个字符串(如英文字母)的差异程度的量化测量,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。

编辑距离应用

一、可应用于NLP,如拼写检查可以根据一个拼错的字和其他正确的字的编辑距离,判断哪一个(或哪几个)是比较可能的字。
二、编辑距离可以用在生物信息学,判断两个DNA的类似程度。

算法基本原理

用d[i,j]个步骤,表示串是s[1,…,i]转换为t[1,…,j]所需要的最少步骤的次数。我们要想得到s[1,…,i]经过最少次数的增加、删除、替换变成t[1,…,j],那么我们就必须在之前可以以最少次数的增加、删除、替换,使得串s和串t只需要再做一次操作或者不做就可以完成s[1,…,i]到t[1,…,j]的转换。

d[i][j]实现有三种方法

1、第一个单词的前i位变成第二个单词的前j-1位,然后再插入一个字符(d[i][j-1]+1)
2、第一个单词的前i-1位变成第二个单词的前j位,然后再删去一个字符(d[i-1][j]+1)
3、第一个单词的前i-1位变成第二个单词的前i-1位,然后替换最后一个字符,如果最后一个字符相同,就不用替换,反之,如果不同就替换最后一位(d[i-1][j-1] + 1)

代码如下:

class Solution:def minDistance(self, word1, word2):n = len(word1)m = len(word2)#如果其中一个字符串是空的if n * m == 0:return n + md = [[0]*(m + 1) for _ in range(n + 1)]for i in range(n + 1):d[i][0] = ifor j in range(m + 1):d[0][j] = jfor i in range(1, n + 1):for j in range(1, m + 1):Insert = d[i - 1][j] + 1Delete = d[i][j - 1] + 1Exchange = d[i - 1][j - 1]if word1[i - 1] != word2[j - 1]:Exchange += 1d[i][j] = min(Insert, Delete, Exchange)return d[n][m]test = Solution()
print(test.minDistance("horse", "ros"))

LeetCode 72.编辑距离(动态规划)相关推荐

  1. 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示word1[:i]的单词与word2[:j]单词之间的最小编辑距离 步骤二.推断状态方程: 在确定递推公式的时候,首先要考虑清楚编辑的几 ...

  2. [leetcode] 72. 编辑距离(二维动态规划)

    72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...

  3. Java实现 LeetCode 72 编辑距离

    72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字 ...

  4. ⭐算法入门⭐《动态规划 - 串匹配》困难02 —— LeetCode 72. 编辑距离

  5. LeetCode 72. 编辑距离(DP)

    1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...

  6. 2022-3-22 Leetcode 72.编辑距离

    class Solution {public:int minDistance(string word1, string word2) {int n = word1.length();int m = w ...

  7. [leetcode] 72.编辑距离

    给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: ...

  8. LeetCode 72 编辑距离

    思路:动态规划 class Solution { public:int minDistance(string word1, string word2) { int dp[501][501]; for( ...

  9. leetcode 72. 编辑距离

    /***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...

最新文章

  1. Keil中使用宏编译来定义DEBUG输出
  2. uses 子句的写法
  3. 用反向传导分子模型去计算基团的定位效应
  4. QT中写一个求QVector容器中数据均值的函数
  5. 异或方式找到一组数组中不重复的两个数(同班同学方法)
  6. java编写应用程序_为您的Java应用程序编写数据驱动的测试
  7. 社会工程学***的八种常用方法
  8. hpux系统启动中被某个服务hang住的解决办法
  9. 机器学习基础(四十四)—— 优化
  10. 计算机网络实验【常见网络测试命令的使用】
  11. kindle刷机ttl_求助大神!现在KPW2只能在TTL下进入uboot
  12. Eagle 画板-拼板-输出Gerber到SeeedStudio打样过程笔记
  13. python做语音识别
  14. PDF用什么软件编辑,怎么添加PDF水印
  15. 中心极限与大数定理律的关系_【小结】实数域的基本定理
  16. 网站必备之简繁切换功能实现
  17. vue+websocket+nodejs实现聊天室 -一对多、一对一聊天
  18. 就业指导期末试题(含正确答案)
  19. “人工智能发展现状”
  20. 在UE中创建配置文件

热门文章

  1. 【操作系统/OS笔记18】虚拟文件系统概念
  2. 构造函数和构造代码块
  3. xstream java_XStream将java转化成xml的简单使用
  4. java华容道swing_一道java的界面初级题目,已有代码,加几行即可,华容道游戏。...
  5. java button jbutton_java程序将Button改成JButton,该如何改?
  6. org.springframework.web.client.RestClientException: Could not extract response
  7. android timepicker分割线颜色,关于Android的TimePicker和DatePicker一些简单的使用问题
  8. 使CEdit处于全选状态
  9. ORM框架之Mybatis(三)延迟加载、开启一二级缓存及使用注解增删改查
  10. 自走棋投降代码_自走棋太火惨遭针对!代码哥之后又是锁钱挂?玩家:还有拒绝员!...