原文:http://m.blog.csdn.net/blog/cqs_2012/17849877

  • 题目
有两个字符串A和B,对A可以进行如下的操作:插入一个字符,删除一个字符,替换一个字符。问A可以通过最少多少次操作变为B?我们定义这个结果为字符串的最小编辑距离。
  • 思路(借鉴九章算法的,感觉挺好,所以实现,共同学习)

字符串编辑距离归为DP题目,所以还是超好的

 1 for(int i = 0;i<int(b.size()+1);i++)
 2         dp[i] = new int[a.size()+1];
 3     for(int i = 0; i<int(a.size()+1);i++)
 4         dp[0][i] = i;
 5     for(int i = 1; i<int(b.size()+1);i++)
 6         dp[i][0] = i;
 7     for(int i = 1; i<int(b.size()+1);i++)
 8         for(int j=1; j<int(a.size()+1);j++)
 9             if( a[j-1] != b[i-1] )
10                 dp[i][j] = min (dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
11             else
12                 dp[i][j] = min (dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]);
13     return dp[b.size()][a.size()];

  • 实验

  • 代码
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4
 5 // get the minest number of three numbers
 6 int min(int a,int b,int c);
 7
 8 // get the minest distance of string a and b
 9 int zifuchuan_bianji_juli(string a,string b);
10
11
12 int main()
13 {
14     string a,b;
15     cout<<"please input string a and b"<<endl;
16     cin>>a>>b;
17     cout<<"a=\""<<a<<"\",b=\""<<b<<"\""<<endl;
18     cout<<"字符串距离为: "<<zifuchuan_bianji_juli(a,b)<<endl;
19     system("pause");
20     return 0;
21 }
22
23 int zifuchuan_bianji_juli(string a,string b)
24 {
25     if( a.empty() )
26         return int( b.size() );
27     else if( b.empty())
28         return int( a.size() ) ;
29
30     int ** dp = new int*[ b.size()+1 ];
31     for(int i = 0;i<int(b.size()+1);i++)
32         dp[i] = new int[a.size()+1];
33     for(int i = 0; i<int(a.size()+1);i++)
34         dp[0][i] = i;
35     for(int i = 1; i<int(b.size()+1);i++)
36         dp[i][0] = i;
37     for(int i = 1; i<int(b.size()+1);i++)
38         for(int j=1; j<int(a.size()+1);j++)
39             if( a[j-1] != b[i-1] )
40                 dp[i][j] = min (dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
41             else
42                 dp[i][j] = min (dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]);
43     return dp[b.size()][a.size()];
44 }
45
46 int min(int a,int b,int c)
47 {
48     if(a>b)
49     {
50         if(b>c)
51             return c;
52         else return b;
53     }else if(a>c)
54         return c;
55     else return a;
56 }

转载于:https://www.cnblogs.com/Sky-Yanjun/p/4971125.html

【转】字符串编辑距离相关推荐

  1. 字符串编辑距离(Edit Distance)

    一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...

  2. 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

    最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...

  3. 字符串编辑距离的计算方法

    字符串编辑距离,又称  Levenshtein距离, 指由一个字符串变成另一个字符串所需的最少的编辑次数,这些编辑操作包括将一个字符替换为另一个字符,删除一个字符和添加一个字. 详细内容可以参考 ...

  4. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  5. JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码)

    JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码) levenshteinDistance.js完整源代码 # levenshteinDistance.te ...

  6. 动态规划 —— 线性 DP —— 字符串编辑距离

    [概述] 字符串编辑距离,即 Levenshtein 距离,是俄国科学家 Vladimir Levenshtein 提出的概念,是指从一个字符串修改到另一个字符串时,编辑单个字符所需的最少次数,编辑单 ...

  7. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  8. 字符串编辑距离(转载)

    Levenshtein Distance (LD, 来文史特距离)也叫edit distance(编辑距离),它用来表示2个字符串的相似度,LD定义为需要最少多少步基本操作才能让2个字符串相等,基本操 ...

  9. 字符串编辑距离之JaroWinklerDistance

    概述 Jaro-Winkler Distance是一个度量两个字符序列之间的编辑距离的字符串度量标准,是由William E. Winkler在1990年提出的Jaro Distance度量标准的一种 ...

  10. 字符串编辑距离之Damerau–Levenshtein Distance

    概述 Damerau–Levenshtein Distance用来测量两个字符序列之间的编辑距离的字符串度量标准.两个词的Damerau–Levenshtein Distance是从一个词转换为另一个 ...

最新文章

  1. Cassandra安装测试
  2. python【数据结构与算法】棋盘覆盖问题
  3. vi 编辑器基本使用
  4. 特别的520,送给特别的你们,还不来看看?
  5. 类路径是什么意思_多播是什么意思 多播介绍【详解】
  6. ASP.NET跨页面传值技巧
  7. uat环境是什么环境_环境污染会对环境造成怎样的损害?污水处理活性炭能起到什么效果呢?...
  8. Android平台类加载流程源码分析
  9. java 搭建企业应用框架_java培训一般要学多久
  10. 【VB.NET】VB.NET窗体与控件问题的解答
  11. excel表中怎么插入visio_Excel工作表中的排序,你真的掌握吗?10张动图带你了解!...
  12. 再见!热血活力的深圳
  13. 文件删除后未释放磁盘
  14. optuna自动调参框架对lgb的超参进行优化
  15. 【NOIP模拟】夕阳
  16. ASP.NET编写一个简易网站
  17. 茶馆人物表(按字母顺序)
  18. 江苏“同心圆”工程为银发投资安全设“保护圈”
  19. 头牌知产介绍速冻水饺商标属于哪一类
  20. SD-WAN 与传统 WAN

热门文章

  1. QT修改应用程序图标
  2. BlackBerry 9520上结合139邮箱实现Gmail邮件的短信通知
  3. Luogu2481 SDOI2010 代码拍卖会 DP、组合
  4. DIV+CSS定义及优势
  5. C# 注册Dll文件
  6. NYOJ 119 士兵杀敌(三) (线段树)
  7. 《构建之法》阅读笔记05
  8. [转]WiX v3.7——支持MSBuild、自更新及引用计数
  9. ASP.NET服务器对于请求的处理过程
  10. 下载SAP标准教程的方法