51Nod 1183 编辑距离(dp)

来源:互联网 发布:时时彩源码下载 编辑:程序博客网 时间:2024/05/20 23:35


1183 编辑距离

编辑距离,又称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的编辑距离


经典回顾


<span style="font-size:24px;">#include"stdio.h"#include"stdlib.h"#include"string.h"#define N 1002int a[N][N]={0};int min(int a,int b,int c){int k;    k=a<b?a:b;return k<c?k:c;}int main(){char *str1,*str2,*p1,*p2;int i,j;str1=(char *)malloc(sizeof(char )*N);str2=(char *)malloc(sizeof(char )*N);scanf("%s%s",str1,str2);for(i=0;i<=strlen(str1);i++)a[i][0]=i;for(i=0;i<=strlen(str2);i++)a[0][i]=i;    //注意初始化      for(p1=str1,i=1;p1<str1+strlen(str1);i++,p1++)for(p2=str2,j=1;p2<str2+strlen(str2);j++,p2++){int cost;cost=(*p1==*p2?0:1);       a[i][j]=min(a[i-1][j-1]+cost,a[i-1][j]+1,a[i][j-1]+1);}printf("%d\n",a[strlen(str1)][strlen(str2)]);return 0;}</span>


0 0