ECNUOJ 2857 编辑距离
编辑距离
Time Limit:5000MS Memory Limit:65536KB
Total Submit:314 Accepted:128
Description
有两个字符串(仅有英文小写字母组成)A,B。我们可以通过一些操作将A修改成B。操作有三种:1修改一个字母,2删除一个字母,3插入一个字母。现在定义编辑距离为将A通过上述操作修改成B的最少次数。
Input
第一行有一个正整数N,表示有多少组测试数据
接下来有2*N行,每两行代表一组数据。每组数据的第一行是一个起始字符串A,第二行是目的字符串B。
Output
对于每组数据,输出一个值,表示将A修改成B的编辑距离、每组数据占一行,不要有多余空格。
N<=100 , A,B字符串的长度不超过500
Sample Input
2
hello
hi
apple
google
Sample Output
4
4
Source
解题:动态规划,dp[i][j]表示源串S前i个字符转成目标串T的前j个字符需要的最短编辑距离。
那么我们有如果S[i] == T[j]那么直接把dp[i][j] 就等于 dp[i-1][j-1],因为这个相等,就不需要操作次数
如果S[i] != T[j] 那么我们有三种选择,增加、删除以及修改,我们先考虑修改,如果把S[i]修改为T[j],那么dp[i][j] = dp[i-1][j-1]+1
如果我们要把S[i]删除,那么dp[i][j] = dp[i-1][j] + 1也就是说用前面的S[i-1]就能变成T[j]
如果我们选择增加 那么dp[i][j] = dp[i][j-1] + 1 也就是说,我们已经可以把S前面i个经过最短的编辑距离变为T[j-1]现在要变成T[j],我们可以选择在S[i]后面加上T[j],这样
S[i]就可以经过最短的编辑距离变成T[j]了。记得取最小就是了
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
char sa[maxn],sb[maxn];
int dp[maxn][maxn];
int main() {
int kase;
scanf("%d",&kase);
while(kase--) {
scanf("%s%s",sa,sb);
int n = strlen(sa);
int m = strlen(sb);
memset(dp,0x3f,sizeof dp);
for(int i = ; i <= n; ++i) dp[i][] = i;
for(int i = ; i <= m; ++i) dp[][i] = i;
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) {
dp[i][j] = min(dp[i-][j]+,dp[i][j-]+);
dp[i][j] = min(dp[i][j],dp[i-][j-] + (sa[i-] != sb[j-]));
}
printf("%d\n",dp[n][m]);
}
return ;
}
ECNUOJ 2857 编辑距离的更多相关文章
- [LeetCode] One Edit Distance 一个编辑距离
Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...
- C#实现Levenshtein distance最小编辑距离算法
Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑 ...
- 利用Levenshtein Distance (编辑距离)实现文档相似度计算
1.首先将word文档解压缩为zip /** * 修改后缀名 */ public static String reName(String path){ File file=new File(path) ...
- Levenshtein Distance算法(编辑距离算法)
编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ...
- 编辑距离——Edit Distance
编辑距离 在计算机科学中,编辑距离是一种量化两个字符串差异程度的方法,也就是计算从一个字符串转换成另外一个字符串所需要的最少操作步骤.不同的编辑距离中定义了不同操作的集合.比较常用的莱温斯坦距离(Le ...
- 编辑距离及其动态规划算法(Java代码)
编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.一般情况下编辑操作包括: 将一个字符替换成另一个字符: 插入一个字符: 删除一个字 ...
- stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...
- leetcode72. Edit Distance(编辑距离)
以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...
- 准备NOIP2017 编辑距离问题 模板
输入 第1行:字符串a(a的长度 <= 1000). 第2行:字符串b(b的长度 <= 1000). 输出 输出a和b的编辑距离 输入示例 kitten sitting 输出示例 ...
随机推荐
- oracle11g文件系统库迁移到ASM库上面
最近把oracle11g的文件系统库迁移到了asm库上面. 迁移过程大致如下: 最少停机方案: 实例joinpay02 | |数据库joinpay02 需要改动的文件: 数据文件 控制文件 redo文 ...
- Synchronization (computer science)
过程同步.数据同步. In computer science, synchronization refers to one of two distinct but related concepts: ...
- html转word文档
html转word文档 package cn.com.szhtkj.util; import java.io.ByteArrayInputStream; import java.io.File; im ...
- 51nod 麦克打电话(AC自动机+树状数组)
SAM+线段树合并的裸题. 但我们讨论AC自动机的做法. 先建出AC自动机.考虑询问在[a,b]中出现的次数就是\([1,b]\)的出现次数-\([1,a-1]\)的出现次数.把询问离线.然后我们要求 ...
- ajax 不执行
1.get形式访问: 一个相同的URL 只有一个结果,所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果,post则不会 解决办法: 1.url+new Date( ...
- C实现JAVA类似ArrayList的静态链接库
文件结构: ArrayList.h:头文件 ArrayList.c:实现头文件中的功能 ArrayListTest.c:测试 ArrayList.h 头文件的基本框架: #ifndef _ARRAYL ...
- 物理机安装CentOS7
最近捯饬到一台很老的机器,装Win7吧卡的不要不要的,思来想去的,搞个CentOS来玩玩,玩玩python的一些个人项目,一般装机啥的,都要做启动盘啥的,但是,这个都的话有很多网友已经分享了很多好的文 ...
- String spilt时转义特殊字符【转】
在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果. 我们经常使用public String[] split(String regex)方法来拆分一 ...
- Android核心服务解析篇(三)——Android系统的启动
从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
- mfc 链接 access 2007 数据库
神马也不说了,直接给出源代码和project 原理这个东西 Google 下.都出来了.自己就说下作为新手 , 1 应该打印出,链接错误原因 2 应该将数据库放到project以下,特别注意这点 给 ...