您的位置:首页 > 其它

HDU 1841: Find the Shortest Common Superstring

2015-07-30 15:52 501 查看
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[2000005],b[2000005];
int nextd[2000010];
void get(char *ch)
{
int l = strlen(ch);
int s = 0,t = -1;
nextd[0] = -1;
while(s <l)
{
if(t == -1|| ch[s] == ch[t])
{
t++;
nextd[++s] = t;
}
else
t = nextd[t];
}
}
int  kmpd(char *ch1,char *ch2)
{
get(ch2);
int l1 = strlen(ch1);
int l2 = strlen(ch2);
int s = 0,t = 0;
int ma=0;
while(s <l1&&t<l2)
{
if(t == -1 || ch1[s] == ch2[t])
{
t++;
s++;

}
else
t = nextd[t];
}
return t;
}
int main()
{
int i,j,k,n,m,l;
while(~scanf("%d",&n))
{
while(n--)
{
scanf("%s %s",a, b);
int la = strlen(a);
int lb = strlen(b);
int l1 = kmpd(a, b);
int l2 = kmpd(b, a);
//printf("%d %d\n",l1,l2);
printf("%d\n",la + lb - max(l1,l2));
}

}
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: