前一阵子在博客园搜到有介绍这个好的算法(一个快速、高效的Levenshtein算法实现),今天想起来就把它写了一下。

#include<iostream>
#include<string>
#include<vector>
#include<conio.h>
#include<istream>int min3(int a,int b,int c){if(a < b){return a < c?a:c;}else{return b < c?b:c;}
}
int main()
{std::string str1,str2;std::vector<int> v1;std::vector<int> v2;//输入要比较的两个字符串std::cout<<"input a string:";getline(std::cin,str1);std::cout<<"input another string:";getline(std::cin,str2);//交换使str1是短的字符串if(str1.length() > str2.length()){std::string temp = str1;str1 = str2;str2 = temp;}//内外循环次数int outTimes = str1.length();int innerTimes = str2.length();//初始化v1,v2for(int i = 0;i <= innerTimes; ++ i){v1.push_back(i);v2.push_back(0);}for(int i = 0;i < outTimes; ++ i){v2.at(0) = i + 1;for(int j = 0;j < innerTimes; ++ j){//如果不相等,编辑代价为1//找出v1[j+1],v1[j],v2[2]中最小的数,按情况赋给v2[j+1]if(str1.at(i) != str2.at(j)){v2.at(j + 1) = min3(v1.at(j + 1),v1.at(j),v2.at(j)) + 1;}//相等则编辑代价为0else if(str1.at(i) == str2.at(j)){v2.at(j + 1) = min3(v1.at(j + 1),v1.at(j),v2.at(j));}}//v1,v2逐次向右平移
        v1.assign(v2.begin(),v2.end());}//v2的最后一个元素即为距离int changTimes = v2.at(innerTimes);std::cout<<"\nthe distance of two string is "<<changTimes;getch();
}

转载于:https://www.cnblogs.com/hellophone/archive/2012/10/24/2737760.html

用C++写的 Levenshtein 算法实现相关推荐

  1. 【腾讯三面】你能现场写一下LRU算法吗?

    " 金三银四,又到了换工作的黄金期.各位小伙伴们都准备好了吗? " 这句话大家是不是最近已经要看吐了呢? 每当这个时候,就证明招聘旺季又来啦~ 春招.校招.社招-- 那你真的准备好 ...

  2. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)

    Python徒手实现识别手写数字-图像识别算法(K最近邻) 写在前面 这一段的内容可以说是最难的一部分之一了,因为是识别图像,所以涉及到的算法会相比之前的来说比较困难,所以我尽量会讲得清楚一点. 而且 ...

  3. 一个快速、高效的Levenshtein算法实现

    转自:http://www.cnblogs.com/ymind/archive/2012/03/27/fast-memory-efficient-Levenshtein-algorithm.html ...

  4. 一个Delphi写的DES算法, 翻译成C#

    其实.NET Framework已经提供实现DES算法的类: System.Security.Cryptography.DESCryptoServiceProvider.之所以要把一个Delphi写的 ...

  5. Levenshtein算法的JavaScript实现

    Levenshtein算法 Levenshtein算法定义及算法原理见这篇文章:一个快速.高效的Levenshtein算法实现 JavaScript实现 function levenshteinDis ...

  6. 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

    对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

  7. 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  8. 手写笔迹还原算法(InkCanvas)

    因产品需求,我们打造了自主的画笔组件InkCanvas,在我们的项目纸笔课堂.晓课堂中得到了很好的应用.同时我们也通过技术输出,在直播云项目中集成了组件的核心算法,升级了其涂鸦功能中的笔迹展示效果,在 ...

  9. 使用Python和C++的写数据结构和算法

    使用Python和C++的写数据结构和算法 1.数据结构和算法简介 2.数据结构 2.1 堆栈 2.2 队列 2.3 散列表 2.4 二叉树 2.5 线性搜索 2.6 二进制搜索 2.7 递归 2.8 ...

最新文章

  1. haproxy访问控制与动静分离
  2. 为 Visual Studio 安装数据库工具
  3. Android各种各样的Drawable-更新中
  4. 蓝桥杯 - 生命之树(树形dp)
  5. 64 SD配置-交货凭证配置-在交货时定义项目类别确定
  6. Java中junit单元测试
  7. mysql truncate 授权_Oracle给用户授权truncatetable的实现方案
  8. CSS实现水平垂直居中的1010种方式
  9. 帆软注册文件_注册信息- FineReport帮助文档|报表开发|报表使用|学习教程
  10. Java程序强制删除文件
  11. 词根词缀整理2019-3-20
  12. mysql 累乘_oracle sql语句实现累加、累减、累乘、累除
  13. bootstrap table表头列名转行
  14. WARNING: The script markdown_py.exe is installed in......
  15. 飞桨火力全开,重磅上线3D模型:PointNet++、PointRCNN!
  16. 一个正整数到 Excel 编号之间的转换
  17. 微信提现免费额度领取,快来领取!我领取了738元
  18. android jni黑屏,android使用高德地图出现诡异的:JNI DETECTED ERROR IN APPLICATION
  19. vue中的几个动效网站
  20. 截图识别文本OCR软件

热门文章

  1. 从零开始入门 | Kubernetes 中的服务发现与负载均衡
  2. 技术解析系列 | PouchContainer 支持 LXCFS 实现高可靠容器隔离
  3. 全球地区资料json 含中英文 经纬度_[喵咪软件推荐(1)]全球国家信息库
  4. signature=ae032dcfdc89568ef19ec0c956de36e7,来用百度密语吧!!!
  5. html 标题树,html树
  6. layui下拉框怎么获取自定义值_layui select获取自定义属性方法
  7. 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
  8. 全球及中国数字出版产业投资产值与运营模式咨询报告2022版
  9. 粤桂粤黔协作签约-丰收节交易会·李喜贵:谋定一县一园产业园
  10. 腾讯阿里谋定联姻农业 智慧农业对话中国农民丰收节交易会