LD(Levenshtein distance)莱文斯坦距离----编辑距离
链接:https://ac.nowcoder.com/acm/contest/327/G
来源:牛客网
G处女座与复读机
题目描述
一天,处女座在牛客算法群里发了一句“我好强啊”,引起无数的复读,可是处女座发现复读之后变成了“处女座好强啊”。处女座经过调查发现群里的复读机都是失真的复读机,会固定的产生两个错误。一个错误可以是下面的形式之一:
将任意一个小写字母替换成另外一个小写字母
在任意位置添加一个小写字母
删除任意一个字母
处女座现在在群里发了一句话,他收到了一个回应,他想知道这是不是一个复读机。
/*
算法简介:
莱文斯坦距离是两个字符串序列的距离度量。形式化地说,是由一个单词变为另一个单词需要的最小编辑次数(编辑方式:插入,删除,替换)。所以莱文斯坦距离也称为编辑距离。
定义:
两个字符串a,b之间的莱文斯坦距离为:
如果
min(i,j) = 0;
levab(i,j) = max(i,j);
{length_a = 0 || lenth_b = 0,levab(a,b) = max(length_a,length_b);}
否则,
t = min(levab(i-1,j)+1,levab(i,j-1)+1);
levab = min( t,levab(i-1,j-1) + ( ai!= bj ) );
{
如果ai != bj,编辑数+1,否则+0;
}
为了实现上述定义,我们用dp[i][j]来存s1[1…i]变成s2[1…j]需要的最小编辑数
得出公式:
i = 0:
dp[i][j] = j;
j = 0:
dp[i][j] = i;
i,j都不为0:
dp[i][j] = min(min(dp[i-1][j] + 1,dp[i][j-1] + 1),dp[i-1][j-1] + (s1[i] != s2[j] ) );
公式理解:
1.
i == 0 || j==0好理解,有一个为空串,当然最小编辑数就是非空串的长度
2.
对于i,j都非零的情况,分三种情况:
1)假设s1[1…i-1] 变换到s2[1…j]需要最小的操作数为dp[i-1][j] = k,那么对于dp[i][j] = k+1,那么s1i就多余了,只需将s1中s1i删除
2)假设s1[1…i] 变换到s2[1…j-1]需要最小的操作数为dp[i-1][j] = k,那么对于dp[i][j] = k+1,只需在s1中s1i后插入s2j
3)假设s1[1…i-1] 变换到s2[1…j-1]需要最小的操作数为dp[i-1][j] = k,那么dp[i][j]可能需要编辑也可能不需要编辑,要看s1i 是否等于s2j,如果不相等,那就要把s1i替换成s2j,否则不需要编辑,所以dp[i][j] = k + (s1i!= s2j);
*/
ac_code:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int dp[105][105];
int main()
{string s1,s2;while(cin>>s1>>s2){int length1 = s1.size(),length2 = s2.size();for(int i = 0; i < length1; i++)dp[i][0] = i;for(int j = 0; j < length2; j++)dp[0][j] = j;int temp;for(int i = 1; i <= length1; i++){for(int j = 1; j <= length2; j++){temp = min(dp[i-1][j],dp[i][j-1]) + 1;dp[i][j] = min(temp,dp[i-1][j-1]+(s1[i-1]!=s2[j-1]));}}if(dp[length1][length2] <= 2)cout<<"YES"<<endl;elsecout<<"NO"<<endl; }return 0;
}
LD(Levenshtein distance)莱文斯坦距离----编辑距离相关推荐
- 莱文斯坦距离(编辑距离)算法 (Levenshtein Distance Algorithm)
什么是 莱文斯坦距离算法 (Levenshtein Distance Algorithm) ? Levenshtein Distance,莱文斯坦距离,通常被称为编辑距离(Edit Distance) ...
- 编辑距离——莱文斯坦距离(Levenshtein distance)
在信息论和计算机科学中,莱文斯坦距离是一种两个字符串序列的距离度量.形式化地说,两个单词的莱文斯坦距离是一个单词变成另一个单词要求的最少单个字符编辑数量(如:删除.插入和替换).莱文斯坦距离也被称做编 ...
- 编辑距离算法【莱文斯坦距离、Levenshtein 算法】
文章目录 算法概述: 应用 与其他编辑距离度量的关系 问题定义: 解析: 例题: 参考链接: 算法概述: 在信息论和计算机科学中,莱文斯坦距离是一种两个字符串序列的距离度量.形式化地说,两个单词的莱文 ...
- 动态规划——莱文斯坦距离
文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 莱文斯坦距离 在搜索引擎中会有搜索词纠错的功能.这个功能背后的原理是编辑距离. 编辑距离 编辑距离是量化 ...
- 相似度算法--莱文斯坦距离加入同义词逻辑
一. 背景 在问题检索中,依赖文本相似度给用户做推荐问题,假设1.0分为满分,那么: 1.0分表示完全匹配:可以将问题准确推送给用户 0.8分表示高度相似:可以将问题推荐给用户 0.6分表示低度相似: ...
- Levenshtein Distance算法JAVA代码与示例图解
Levenshtein Distance莱文斯坦距离 指的是两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. Leven ...
- Levenshtein Distance (LD算法) 编辑距离算法原理
莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种.指两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符. L ...
- Levenshtein Distance编辑距离应用实践——拼写检查(Java fork/join框架实现)
文章目录 1. 实现莱文斯坦距离算法 1.1 算法原理分析 1.2 代码实现 2. 使用fork/join进行匹配 2.1 单线程匹配 2.2 fork/join多线程匹配 2.3 传统多线程版本 2 ...
- 一文详解编辑距离(Levenshtein Distance)
更多博文请关注:https://blog.bigcoder.cn 一. 什么是Levenshtein Distance Levenshtein Distance,一般称为编辑距离(Edit Dista ...
最新文章
- 机器学习近年来之怪现象
- Java并发基础02. 传统线程技术中的定时器技术
- [react] 怎样在react中创建一个事件?
- 免费公测中-GPU数据库SQream DB正式上线云市场
- 使用函数进行邮件发送的示例
- hive内部表和外部表的区别_走近大数据之Hive进阶(四、Hive的表连接)
- php旧物交易开源代码_仿互站PHP源码 虚拟物品在线交易网站源码 附14套风格
- FBWF和EWF的对比
- 用户自动设置报表格式
- 7-14 设计一个风扇Fan类 (20 分)
- Talib.MAVP中的periods参数意义
- 使用Mininet创建Topo
- 看完20部电影,你可以去任何一家公司做董事长或总经理
- 解决Visio中对象不能通过键盘方向键微调位置
- HCIA笔记-----第二天
- 贝叶斯网络的python实现:Monty Hall问题的求解
- 如何解决div里面的h4标题拖拽,并且实现div里面的文本能够选中和不能选中的问题
- 关于Flash的一些随想(2021年)
- python爬虫代码示例分享
- 线性回归的直觉与实现
热门文章
- maven命令行创建project
- 六、数据的基本统计描述
- ​知乎700万人围观:如何快速成为数据分析师?
- 漫画 | 公司测试因提Bug不规范,锒铛入狱~
- 微软太良心,这么强大的软件竟然完全免费!
- 【Git学习笔记5】以普通模式合并(--no-ff)、push到远程库及分支管理策略
- python tutorial_Python Tutorial笔记
- python 连接mysql 字符集_Python 操作 MySQL 字符集的问题
- java socket windows linux,socket在windows下和linux下的区别
- 11函数的应用(函数名=变量)