hdu 2895 (水)

点击打开链接


给你两个字符串,要求用最少的步骤将串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;
}


你可能感兴趣的:(字符串,HDU,水)