一个KMP的简单题
不过好久没用过这个东东了,今天写的时候花了很多时间;
只需要花点时间判断下所有的元素都相同的的情况就行了!
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000006
using namespace std;
char s[maxn];
int next[maxn]; void getnext(char *t)
{
// t为模式串
int i=,j= -,l = strlen(t);
next[] = -;
while(i < l)
{
if(j == - || t[i]==t[j])
{
++i;
++j;
next[i] = j;
}
else j = next[j];
}
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(next,,sizeof next);
scanf("%s",&s);
getnext(s);
int l=strlen(s);
bool flag=,ff=;
int i;
for(i=; i<l; i++)
if((next[i]+)!=next[i+]) {ff=;break;}
if(ff==){printf("%d\n",(next[l]+)/);continue;} for(int j=; j<l; j++)
{
if(next[j]==next[l])
{
printf("%d\n",next[l]);
flag=;
break;
}
}
if(!flag)
{
int a=max(i/,next[l]/);
printf("%d\n",a);
}
}
return ;
}