您的位置:首页 > 其它

hdu 2594 Simpsons’ Hidden Talents(KMP)

2016-01-23 19:09 357 查看
题意:给定两个字符串s1,s2,找出s1的前缀和s2的后缀的公共长度。

思路:合并字符串后求next数组。

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
using namespace std;

char s1[100010],s2[50005];
int _next[100010];

void get_next(char a[])
{
int i=-1,j=0,len=strlen(a);
_next[0]=-1;
while(j<len)
{
if(i == -1 || a[i] == a[j])_next[++j]=++i;
else i=_next[i];
}
return;
}

int main()
{
while(cin>>s1>>s2)
{
int lena=strlen(s1),lenb=strlen(s2),len=lena+lenb;
strcat(s1,s2);
get_next(s1);
while(_next[len]>lena || _next[len]>lenb)
len=_next[len];
len=_next[len];
for(int i=0; i<len; ++i)
cout<<s1[i];
if(len)
cout<<' ';
cout<<len<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: