点击打开链接
给你两个字符串,要求用最少的步骤将串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 10005 int 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; }