编辑距离

leetcode 编辑距离 golang实现

怎甘沉沦 提交于 2019-12-09 20:30:24
描述 给定两个单词word1 和word2,计算出将word1转换成word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例1: 输入: word1 = "horse", word2 = "ros" 输出: 3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e') 示例2: 输入: word1 = "intention", word2 = "execution" 输出: 5 解释: intention -> inention (删除 't') inention -> enention (将 'i' 替换为 'e') enention -> exention (将 'n' 替换为 'x') exention -> exection (将 'n' 替换为 'c') exection -> execution (插入 'u') 思路 动态规划问题 1. 找公式 dp[i][j] 代表 w1 的前i的字符 转成w2 前j个字符需要的步骤 dp[i-1][j] 代表 w1 的前i-1的字符 转成w2 前j个字符需要的步骤 此时w1执行删除第i个字符串操作即可变成w2 dp[i][j-1] 代表 w1 的前i-1的字符 转成w2

【LeetCode】编辑距离

匿名 (未验证) 提交于 2019-12-03 00:14:01
【问题】给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1 : 输入: word1 = "horse" , word2 = "ros" 输出: 3 解释: horse -> rorse (将 'h' 替换为 'r' ) rorse -> rose (删除 'r' ) rose -> ros (删除 'e' ) 【思路】 利用动态规划的思想,我们可以得到以下几个递推式: 在DP矩阵初始化时,dp[i][j]表示source[0:i]编辑成result[0:j]所需要的最小编辑距离,因此当i=0或者j=0,则需要最小编辑距离为非零长度字符串的长度(依次插入或删除)。 如果source[i]和result[j]字母相同,则cost[i][j] = cost[i-1][j-1],相同字符不进行处理,不需要操作数。 将对word1处理转换为word1和word2的处理: word1 插入一个字符 dp[i-1][j] + 1 -> dp[i][j] word1 删除一个字符 = word2 插入一个字符 dp[i][j-1] + 1 -> dp[i][j] word1 替换一个字符 = word1 word2 都替换一个字符 dp[i-1][j-1]

序列比对(25)编辑距离

匿名 (未验证) 提交于 2019-12-03 00:03:02
本文介绍两个字符串的编辑距离并给出代码。 编辑距离 所谓编辑距离,就是给定两个字符串后,将一个字符串变为另一个字符串所需要花费的最少步骤。这个改变包括“插入一个字符”、“删除一个字符”,“替换一个字符”。比如: v = T G C A T A T \bm{v}=TGCATAT v = T G C A T A T 与 w = A T C C G A T \bm{w}=ATCCGAT w = A T C C G A T 这两个字符串的编辑距离为4。 编辑距离的求解过程和全局比对是十分相似的(关于全局比对,可以参见前文《序列比对(一)全局比对Needleman-Wunsch算法》),都需要全部符号参与比对,都允许插入、缺失和错配。所以,编辑距离可以用动态规划算法求解,其迭代公式是: F ( i , j ) is the minimum score of alignments between x 1 … i and y 1 … j . F ( i , 0 ) = i for i = 0 … m . F ( 0 , j ) = j for j = 1 … n . s ( i , j ) = { 0 if x i = y j , 1 otherwise. F ( i , j ) = min { F ( i 1 , j ) + 1 , F ( i , j 1 ) + 1 , F ( i 1 ,

动态规划:编辑距离

匿名 (未验证) 提交于 2019-12-02 23:38:02
题目描述 UNIX系统下有一个行编辑器ed,它每次只对一行文本做删除一个字符、插入一个字符或替换一个字符三种操作。例如某一行的内容是“ABC”,经过把第二个字符替换成“D”、删除第一个字符、末尾插入一个字符“B”,这三步操作后,内容就变成了“DCB”。即“ABC”变成“DCB”需要经过3步操作,我们称它们的编辑距离为3。 现在给你两个任意字符串(不包含空格),请帮忙计算它们的最短编辑距离。 输入描述: 输入包含多组数据。 每组数据包含两个字符串m和n,它们仅包含字母,并且长度不超过1024。 输出描述: 对应每组输入,输出最短编辑距离。 示例1 输入 ABC CBCD ABC DCB 输出 2 3 分析: 假设序列S和T的长度分别为m和n, 两者的编辑距离表示为 d p [ m ] [ n ] dp[m][n] d p [ m ] [ n ] . 则对序列进行操作时存在以下几种情况: a, 当S和T的末尾字符相等时, 对末尾字符不需要进行上述定义操作中(亦即"编辑")的任何一个, 也就是不需要增加计数. 则满足条件: d p [ m ] [ n ] = d p [ m 1 ] [ n 1 ] dp[m][n] = dp[m - 1][n - 1] d p [ m ] [ n ] = d p [ m 1 ] [ n 1 ] . b, 当S和T的末尾字符不相等时,

字符串的编辑距离-动态规划-Python

匿名 (未验证) 提交于 2019-12-02 22:54:36
问题描述: 给定两个字符串A和B,要用最少的操作将字符串A转换成字符串B。其中字符串操作包括: (1)删除一个字符(Insert a character) (2)插入一个字符(Delete a character) (3)修改一个字符(Replace a character) 将字符串A转换成B串所用的 最少 字符 操作数 称为字符串A到 B的编辑距离, 又称为L evenshtein距离,是在1965年, 俄罗斯数学家Vladimir Levenshtein提出的。 问题分析: 动态规划思想 (1)、dp[i][j]表示将字符串 转变为 的最小步骤数。 (2)、边界情况: 不断添加字符 ,dp[0][j] = j。 不断删除字符 ,dp[i][0] = i。 (3)、对应三种字符操作方式: 插入操作 :dp[i][j - 1] + 1 相当于为 B 串的最后插入了 A 串的最后一个字符 ; 删除操作 ; 替换操作 :dp[i - 1][j - 1] +(A[i - 1] != B[j - 1])相当于通过将 B 串的最后一个字符替换为 A 串的最后一个字符。 (4)所以 dp方程式 为: Python实现(时间复杂度:O(mn),空间复杂度:O(mn)): class Solution: def minDistance(self, word1, word2): """ :type

[题解]编辑距离

别来无恙 提交于 2019-12-02 10:35:33
原题链 提交情况 解题思路: DP。如果当前两个字符匹配,则步数不变,否则就进行判断:选出删除,插入或改变中的最小步数。 源代码 #include <bits/stdc++.h> using namespace std; char s1[2550],s2[2550]; int f[2002][2002]; int n,m; int main() { gets(s1 + 1); gets(s2 + 1); int l1 = strlen(s1 + 1); int l2 = strlen(s2 + 1); for (int i = 1;i <= l2;i++) f[0][i] = i; for (int i = 1;i <= l1;i++) f[i][0] = i; for (int i = 1;i <= l1;i++) for (int j = 1;j <= l2;j++) if (s1[i] == s2[j]) f[i][j] = f[i - 1][j - 1]; else f[i][j] = min(min(f[i - 1][j] + 1,f[i][j - 1] + 1),f[i - 1][j - 1] + 1); printf("%d\n",f[l1][l2]); return 0; } 来源: https://www.cnblogs.com/czy--blog/p

第三章上机实践报告

筅森魡賤 提交于 2019-12-01 20:11:48
7-3 编辑距离问题 (30 分) 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。 输入格式: 第一行是字符串A,文件的第二行是字符串B。 提示:字符串长度不超过2000个字符。 输出格式: 输出编辑距离d(A,B) 输入样例: 在这里给出一组输入。例如: fxpimu xwrs 输出样例: 在这里给出相应的输出。例如: 5 题目描述:通过研读题目,我们不难发现,是要求我们输入两个字符串,并且求出他们的编辑距离:①将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。②字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 算法描述:我们假设有字符串A(A.length()== a)和字符串B(B.length()== b).对于一个字符串A来说,A[1]~A[a]到B的编辑距离取决于A[1]~A[a-1]到B的编辑距离。同时,对于一个字符串来说,A到B[1]~B[b]的编辑距离也取决于A到B[1]~B[b-1]的编辑距离。那么

动态规划-编辑距离

ε祈祈猫儿з 提交于 2019-12-01 20:04:56
设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。 输入格式: 第一行是字符串A,文件的第二行是字符串B。 提示:字符串长度不超过2000个字符。 输出格式: 输出编辑距离d(A,B) 输入样例: 在这里给出一组输入。例如: fxpimu xwrs 输出样例: 在这里给出相应的输出。例如: 5 假设序列S和T的长度分别为m和n, 两者的编辑距离表示为dp[m][n]. 则对序列进行操作时存在以下几种情况: a, 当S和T的末尾字符相等时, 对末尾字符不需要进行上述定义操作中(亦即"编辑")的任何一个, 也就是不需要增加计数. 则满足条件: dp[m][n] = dp[m - 1][n - 1]. b, 当S和T的末尾字符不相等时, 则需要对两者之一的末尾进行编辑, 相应的计数会增加1. b1, 对S或T的末尾进行修改, 以使之与T或S相等, 则此时dp[m][n] = dp[m - 1][n - 1] + 1; b2, 删除S末尾的元素, 使S与T相等, 则此时dp[m][n] = dp[m - 1][n] + 1

编辑距离问题(第二次上机实验的实验报告)

折月煮酒 提交于 2019-12-01 17:05:16
7-3 编辑距离问题 (30 分) 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。 输入格式: 第一行是字符串A,文件的第二行是字符串B。 提示:字符串长度不超过2000个字符。 输出格式: 输出编辑距离d(A,B) 输入样例: 在这里给出一组输入。例如: fxpimu xwrs 输出样例: 在这里给出相应的输出。例如 5 ——————————————————————————————————————分割线———————————————————————————————————————— 解法:由于此题和经典的字符串查重有些许相似,考虑使用动态规划解法。 设一个二维数组edit[i][j],表示从前一个输入的串【before】0到i改到后一个输入的串【after】0到j要改的次数当i=0,j=0,edit[i][j]=0;当i=0或者j=0并另一个不为0,edit[][]=不为0的数【因为要加到i/j】当两个尾数相等时候,edit[i][j]=edit[i-1][j-1]当两个尾数不等,需要执行操作:  1.换数

算法第三章实践

风流意气都作罢 提交于 2019-12-01 15:25:45
第一题,数字三角形,从底到顶进行操作,求出以当前数字为顶的三角形所能得到的数字总和的最大值,就可以求出所求。 第二题,最大子段和,求出以当前数字为结尾子段的最大和,用一个maxn变量存最大值就可以求出所求。 第三题,编辑距离问题,每一次可以删一个字符,插入一个字符,或者改一个字符。插入一个字符跟删一个字符的意义其实是一样的。所以就可以看成每次的操作是删一个字符或者是修改一个字符。这道题的策略就是,把两个字符串的子串分别进行求编辑距离。当某个字符串的后面加一个字符时,如何最优的处理——删一个字符还是改一个字符——可以使它们变成前面的我们已经求过的两个字符子串的编辑距离,最后一项dp[a][b]即为解。 来源: https://www.cnblogs.com/jjmmboom/p/11690598.html