DP编辑距离
俄罗斯科学家Vladimir Levenshtein在1965年提出了编辑距离概念。
编辑距离,又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的三种编辑操作包括插入一个字符、删除一个字符、将一个字符替换成另一个字符。 至今,编辑距离一直在相似句子检索的领域中发挥着不可忽视的作用。
如果是:
abcde
acefg
最优对齐状态是:
abcde
a c efg
没有对上的列数是4,函数输出值为4。
状态转移方程是:d[i][j] = min{ d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+(a[i]==b[j]? 0:1) }
你看懂啦吗?
d[i][j]表示s1的前i个和s2的前j个字符相等。
初始状态为d[i][0]=i;d[0][i]=i;
(1)d[i-1][j]表示s1的前i-1个字符和s2的前j个字符已经相同啦,此时可以在s1的后面加上s2的最后一个字符或者把s2最后的字符去掉,即此时d[i][j]=d[i-1][j]+1;
(2)d[i][j-1]和(1)相同;
(3)d[i-1][j-1]时分两种情况
当s1[i]==s2[j]时,d[i][j]=d[i-1][j-1];
当s1[i]!=s2[j]时,d[i][j]=d[i-1][j-1]+1;

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
char s1[],s2[];
int dp[][];
int main()
{
int n;
cin>>n;
while(n--)
{
cin>>s1+>>s2+;
int l1=strlen(s1+);
int l2=strlen(s2+);
dp[][]=;
for(int i=;i<=l1;i++){
dp[i][]=i;
}
for(int i=;i<=l2;i++){
dp[][i]=i;
}
for(int i=; i<=l1; i++)
{
for(int j=; j<=l2; j++)
{if(s1[i]==s2[j])//if一定要紧接着for,顺序错啦就不对啦哦
dp[i][j]=dp[i-][j-];
else dp[i][j]=dp[i-][j-]+;
dp[i][j]=min(dp[i][j],dp[i][j-]+);
dp[i][j]=min(dp[i][j],dp[i-][j]+); }
}
cout<<dp[l1][l2]<<endl;
}
return ;
}
DP编辑距离的更多相关文章
- 51nod 1183 - 编辑距离 - [简单DP][编辑距离问题][Levenshtein距离问题]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 编辑距离,又称Levenshtein距离(也叫做Edi ...
- [dp]编辑距离问题
https://www.51nod.com/tutorial/course.html#!courseId=3 转移方程: 注意如何对齐的. 这个算法的特点是,S和T字符串左边始终是对齐的.为了更好地理 ...
- POJ3356 – AGTC(区间DP&&编辑距离)
题目大意 给定字符串X和Y,可以对字符串进行一下三种操作: 1.删除一个字符 2.插入一个字符 3.替换一个字符 每个操作代价是1,问运用以上三种操作把X变为Y所需的最小步数是多少? 题解 定义dp[ ...
- 经典dp 编辑距离
给定两个字符串S和T,对于T我们可以进行三种操作 (1)在任意位置增加字符 (2)删除字符 (3)替换字符 问最少多少次能把T变成S? 设f(i,j)是S的前i位和T的前j位对齐的最小花费 接下来分析 ...
- 51nod 1183 编辑距离(dp)
题目链接:51nod 1183 编辑距离 #include<cstdio> #include<cstring> #include<algorithm> using ...
- Codeforces 56D Changing a String 编辑距离 记忆dp
主题链接:点击打开链接 编辑距离.,== 一边dp虽然录制前体累,,依然是dp #include<iostream> #include<cstdio> #include< ...
- POJ 3356 AGTC(DP求字符串编辑距离)
给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符. 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案 ...
- (编辑距离问题 线性DP) nyoj1431-DNA基因鉴定
题目描述: 我们经常会听说DNA亲子鉴定是怎么回事呢?人类的DNA由4个基本字母{A,C,G,T}构成,包含了多达30亿个字符.如果两个人的DNA序列相差0.1%,仍然意味着有300万个位置不同,所以 ...
- HDU 4323 Magic Number(编辑距离DP)
http://acm.hdu.edu.cn/showproblem.php?pid=4323 题意: 给出n个串和m次询问,每个询问给出一个串和改变次数上限,在不超过这个上限的情况下,n个串中有多少个 ...
随机推荐
- 史上最全Java表单验证封装类
package com.tongrong.utils; import java.util.Collection; import java.util.Map; import java.util.rege ...
- NAT,网络地址转换详解
这个技术,是一个非常成熟的技术了,但是,为了将其弄得清楚点,体系点,也为了备忘,还是有必要在这里梳理一下! NAT:Network Address Translation. 这个主要是用在网络地址(I ...
- 在C#中保存Bouncy Castle生成的密钥对
在用Bouncy Castle的C#版API产生公钥和私钥 中产生了一对密钥对,可以用bouncy caslte提供的API进行保存 公钥方面的3个类,具体代码根据命名空间自行查看其源代码: Org. ...
- OC-设计模式KVC+KVO定义及使用
一.KVC Key-Value-Coding 键值编码(KVC:是一种存取值的方式,通过key存value 或者通过key获取value key从哪里来的呢? key 把对象里面的属性名.变量名当作了 ...
- runliuv, 安卓查看WIFI密码
用RE查看data/misc/wifi/wpa_supplicant.conf或者其他文件名以.conf结尾的文件
- Python基础教程【读书笔记】 - 2016/7/14
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第六波:第2章 列表和元组 [总览] 数据结构,是通过某种方式组织在一起的数据元素的集合,数据元素可以使数字或字符串 ...
- CSS position, z-index
position 1.fixed:定位.浮动.(需要搭配left, right) 2.absolute:相对于最近的父元素,不考虑周围的布局.(可使用z-index占据位置,则同一位置层叠) 3.re ...
- C语言每日一题之No.9
再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...
- C语言每日一题之No.1
鉴于在学校弱弱的接触过C,基本上很少编程,C语言基础太薄弱.刚好目前从事的是软件编程,难度可想而知.严重影响工作效率,已无法再拖下去了.为此,痛下决心恶补C语言.此前只停留在看书,光看好像也记不住,C ...
- FTP搭建
在桌面上右击“我的电脑”,执行“管理”命令,在“计算机管理”窗口的左窗格中依次展开“系统工具 ”→“本地用户和组”目录,单击选中“用户”选项.在右侧窗格中单击右键,执行“新用户”命令.在 打开的“新用 ...