字符串最小编辑距离

首先介绍一下概念

字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein在1965年提出的概念,又称 Levenshtein距离,是指两个字符串之间,由一个转成另 一个所需的最少编辑操作次数。许可的编辑操作包括

1、将一个字符替换成另一个字符

2、插入一个字符

3、删除一个字符

可以借鉴LCS的思想,采用动态规划,维护一个c[m][n]二维数组,m,n的值分别为字符串1的长度+1,字符串2的长度+1。

c[0][0]表示的是二空串的编辑距离,明显为0。

c[1][0]表示的是字符串1的第一个字母和字符串2(空串)的编辑距离。

说明此二维数组的元素是二者字符串m和n位之间的编辑距离。

我们要求两字符串最小编辑距离,就是要使得c[m-1][n-1]最小。

其状态转换方程与LCS的类似,只是换成了求最小的值。

代码如下:

  1 #include <iostream>
  2
  3 using namespace std;
  4
  5 int min(int num1, int num2, int num3)
  6 {
  7     return (num1 < num2 ? (num1 < num3 ? num1 : num3) : (num2 < num3 ? num2 : num3));
  8 }
  9
 10 int EditLength(string str1, string str2)
 11 {
 12     int m = str1.size() + 1;
 13     int n = str2.size() + 1;
 14     int c[m][n];
 15     for(int i = 0; i < m; ++i)
 16     {
 17         c[i][0] = i;
 18     }
 19     for(int i = 0; i < n; ++i)
 20     {
 21         c[0][i] = i;
 22     }
 23     for(int i = 1; i < m; ++i)
 24     {
 25         for(int j = 1; j < n; ++j)
 26         {
 27             if(str1[i - 1] == str2[j - 1])
 28             {
 29                 c[i][j] = c[i - 1][j - 1];
 30             }else
 31             {
 32                 c[i][j] = min(c[i-1][j-1], c[i-1][j], c[i][j-1]) + 1;
 33             }
 34         }
 35     }
 36     return c[m - 1][n - 1];
 37 }
 38
 39 int main(int argc, const char *argv[])
 40 {
 41     string str1 = "iphone";
 42     string str2 = "iohonrt";
 43     int min = EditLength(str1, str2);
 44     cout << min << endl;
 45     return 0;
 46 }

通过测试用例可得为3,结果正确。

时间: 2024-10-13 07:53:21

字符串最小编辑距离的相关文章

EditDistance,求两个字符串最小编辑距离,动态规划

问题描述: 题目描述Edit DistanceGiven two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a word:     a) Insert a character    

poj3356 字符串的最小编辑距离 dp

poj3356 字符串的最小编辑距离  dp AGTC Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10895   Accepted: 4188 Description Let x and y be two strings over some finite alphabet A. We would like to transform x into y allowing only operations given bel

Levenshein distance最小编辑距离算法实现

Levenshein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式. 其中d[i-1,j]+1代表字符串s2插入一个字母,d[i,j-1]+1代表字符串s1删除一个字母,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项. 算法实现(Python): 假设两个字符串分别为s1,

C#实现Levenshtein distance最小编辑距离算法

Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式. 其中d[i-1,j]+1代表字符串s2插入一个字母才与s1相同,d[i,j-1]+1代表字符串s1删除一个字母才与s2相同,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项. 算法实现(C#): 假设两个

两个字符串的编辑距离-动态规划方法

两个字符串的编辑距离-动态规划方法[转载] 概念 字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出.是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数.其中,字符操作包括: 删除一个字符     a) Delete a character 插入一个字符     b) Insert a character 修改一个字符     c) Replace a character 例如对于字符串"if"和&qu

poj3356 AGTC(经典DP最小编辑距离)

题目意思: 给出两个字符串X,Y,求出从X-->Y的最小操作次数,只可以删除,添加,修改一个字符. http://poj.org/problem?id=3356 题目分析: /** *x,y:是字符串 *动态规划最小编辑距离, *dp[i][j]表示取x的前i个字符和y的前j个字符操作的最小次数. *dp[0][j]=j:取x的前0个字符和y的前j个字符操作的 *最小次数为(j),只能添加到x * *dp[i][0]=i:取x的前i个字符和y的前0个字符操作的 *最小次数为(i),只能删除x *

最小编辑距离(Minimum edit distance)

最小编辑距离是计算欧式距离的一种方法,可以被用于计算文本的相似性以及用于文本纠错,因为这个概念是俄罗斯科学家 Vladimir Levenshtein 在1965年提出来的,所以编辑距离又称为Levenshtein距离. 简单的理解就是将一个字符串转换到另一个字符串所需要的代价(cost),付出的代价越少表示两个字符串越相似,编辑距离越小,从一个字符串转换到另一个字符串简单的归纳可以有以下几种操作,1.删除(delete)2.插入(insert)3.修改(update),其中删除和插入的代价可以

最小编辑距离

概念 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. 算法 动态规划经常被用来作为这个问题的解决手段之一. 具体步骤是:1. 建立个m*n的

Minimum edit distance(levenshtein distance)(最小编辑距离)初探

最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten(k→s) sittin(e→i) sitting(→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. Thewords `computer' and `commuter' are