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 输出示例 ...
随机推荐
- SQL之子查询
子查询概念:把一个查询的结果在另一个查询中使用就叫做子查询 1.子查询作为条件时 当我们使用子查询作为条件时,若子查询返回值为多个,则会报以下错误: "子查询返回的值不止一个.当子查询跟随在 ...
- 如何防止js刷新页面后倒计时改变
1.存入cookie或localstorage(清除浏览器缓存后时间依然改变) 2.存入数据库
- 解析数据(正则,xpath)
正则表达式拆分 import re # 1.拆分字符串 one = 'asdsfsgsh' # 标准 是 s 为拆分 pattern = re.compile('s') result = patter ...
- 深入了解JWT以及JWT的执行机制
1.JWT以什么样的形式存在? eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9 ...
- 搭建ss总结
今天晚上做的事情: 1. https://www.vultr.com/ 购买vps 2. ssh连接到服务器 参照网上帖子安装 https://blog.csdn.net/littlepig19930 ...
- bzoj4551 [HEOI2016]树
题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...
- [USACO10FEB]吃巧克力Chocolate Eating
题目:洛谷P2985. 题目大意:有n块巧克力要吃d天,并且只能按顺序吃.一块巧克力有一个开心值,吃了就能增加开心值.一个人初始开心值为0,且每天早上开心值变为原来的一半.问如何吃巧克力才能使开心值最 ...
- 【BZOJ 1303】 [CQOI2009]中位数图
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是1..n的排列. 设b的位置为i. 设i右边的数字,比b大的为1,比b小的为-1. (i左边的位置数字也一样设置成1和-1 则 ...
- Android之Http通信——1.初识Http协议
Android之Http通信--1.初识Http协议 引言: 今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包-嗯,忙碌的五月最终过去了, ...
- 【android】解决Viewpager设置高度为wrap_content无效的方法
今天发现设置viewpager高度为wrap_content时并没作用.stackoverflow给出了解决方式,就是自己定义viewpager,重写onMesure()方法: public clas ...