1183 编辑距离
来源:互联网 发布:软件开发文档 编辑:程序博客网 时间:2024/06/18 11:52
1183 编辑距离
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将kitten一字转成sitting:
sitten (k->s)
sittin (e->i)
sitting (->g)
所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
给出两个字符串a,b,求a和b的编辑距离。
Input
第1行:字符串a(a的长度 <= 1000)。第2行:字符串b(b的长度 <= 1000)。
Output
输出a和b的编辑距离
Input示例
kittensitting
Output示例
3
李陶冶 (题目提供者)
C++的运行时限为:1000 ms ,空间限制为:131072 KB 示例及语言说明请按这里
ans[i][j]表示字符串s1(0~i)与字符串s2(0~j)的编辑距离
ans[i][j]是由三个方向推知:1.(上)a[i-1][j]+1, 2.(左)a[i][j-1]+1, 3.(左上)if(s1[i]=s2[j]) a[i-1]a[j-1] else a[i-1][j-1]+1.
在这三个方向选一个最小的
为什么有这个
ans[i][j] = min(ans[i][j] , min(ans[i-1][j] + 1 , ans[i][j-1] + 1))状态方程
看表:
sitti ng
01234567k11234567i22123456t33312345t44421234e55532234n66643323数字是什么意思?
sitti ng
01234567k11234567i22123456t33312345t44421234e55532234n66643323数字是什么意思?
第二行:1对应s,可以看成空字符串变为“s”需要改变1次,2对应i可以看成空字符串变为“si"需要改变2次。
第三行:第一个1对应空格即空字符,需要改变1次(删除k),第二个1对应s,需要改变一次(k->s),
2对应i,需要改变2次(k->si).
第三行:第一个2对应空格即空字符,需要改变2次(删除)(ki->空),第二个2对应s,需要改变2次(ki->s)
1对应i,需要改变1次(ki-si),也就是如果s1[i]==s2[j],就不需再多加改变.
任何一个ans[i][j]都是和以上一样的模拟,以上是横着看但竖着看也是一样的。只要在三个方向的状态选一个最小的,就表示当前最小编辑距离。
#include <stdio.h> #include <cstring> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define MAX 1020 char s1[MAX]; char s2[MAX]; int ans[MAX][MAX]; //结果矩阵 int main() { scanf ("%s%s",s1+1,s2+1); int l1,l2; s1[0] = s2[0] = '@'; l1 = strlen(s1) - 1; l2 = strlen(s2) - 1; for (int i = 0 ; i <= max(l1,l2) ; i++) //初始化矩阵 ans[0][i] = ans[i][0] = i; for (int i = 1 ; i <= l1 ; i++) { for (int j = 1 ; j <= l2 ; j++) { //下面三者取最小值 if (s1[i] != s2[j]) //如果这个点对应两字符相等,那么取左上方数字,否则取左上方数字加一 ans[i][j] = ans[i-1][j-1] + 1; else ans[i][j] = ans[i-1][j-1]; ans[i][j] = min(ans[i][j] , min(ans[i-1][j] + 1 , ans[i][j-1] + 1)); //然后再与左方数字+1、上方数字+1取最小值 } } printf ("%d\n",ans[l1][l2]); //右下角的数字即为结果(编辑距离) return 0; }
阅读全文
0 0
- 1183 . 编辑距离
- 1183 编辑距离 dp
- 1183 编辑距离
- 1183 编辑距离
- 51Nod 1183 编辑距离(DP—编辑距离问题)
- 【51Nod】1183 - 编辑距离(dp & 编辑距离)
- 【51Nod】-1183 编辑距离(LCS,编辑距离)
- 【编辑距离问题】 51 nod 1183 编辑距离
- 51Nod 1183 编辑距离(DP—编辑距离问题)
- (51Nod 1183 编辑距离)字符串编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- [51nod]1183 编辑距离
- 51 nod 1183 编辑距离
- 51nod--1183 编辑距离
- 51nod 1183 编辑距离
- HDU6058 Kanade's sum【模拟】
- C++函数的定义与调用
- Bad Cowtractors (Kruskal)
- 【zookeeper】zookeeper集群配置异常 Connection refused 和 myid file is missing
- USACO section 3.1 Stamps
- 1183 编辑距离
- AOJ890 修理牛棚 【贪心】
- mysql-python安装时EnvironmentError: mysql_config not found
- java面试基础-Java代码优化编程
- 机器学习相关算法的大总结(三)
- 错排公式
- 数组的概念
- HDU3790 最短路径问题(双重权值+spfa)
- 51Nod