hdu 2895 (水)

来源:互联网 发布:msdn win7 优化 编辑:程序博客网 时间:2024/06/07 16:50

点击打开链接


给你两个字符串,要求用最少的步骤将串1变位串2
a   #  将字符#加入串2中
d   #   删除字串1中的一个字符

m  #    删除串1中一个字符并将#加入2中

实际上产生距离的就只有add 和 delete,因为modify是不算距离的,那么两个字符串之间的最小编辑距离就一定是他们之间的长度差,可以先通过add或者delete,然后再通过modify完成,题目最后还要求排序,其实,就是要保证这种方法。

举两个例子吧

abcde和xabzdey 长度差为2,那么先add x, a, 然后modify b, z, d, e, y

xabzdey和abcde 长度差为2, 那么先delete x, a, 然后modify a, b, c, d, e



#include"stdio.h"#include"string.h"#define N 10005int main(){int i;int l1,l2;char s1[N];char s2[N];while(gets(s1)){gets(s2);l1=strlen(s1);l2=strlen(s2);if(l1<l2){i=0;while(l2-i!=l1)printf("a %c\n",s2[i++]);while(i<l2)printf("m %c\n",s2[i++]);}else {i=0;while(l1-i!=l2)printf("d %c\n",s1[i++]);i=0;while(i<l2)printf("m %c\n",s2[i++]);}}return 0;}


原创粉丝点击