题目描述
有一个字符串s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。
请问给出一个字符串他的ac串最大长度为多少
输入描述:
输入数据第一行是t,表示数据的组数,接下来每组数据输入一个字符串s
(t<=10,s<=1e5)
输出描述:
输出最大长度
示例1
输入
复制
2
aaaaa
abacc
输出
复制
4
1
说明
aaaab的ac串是aaa(2:4)
acac的ac串是ac(3:4)
链接:https://ac.nowcoder.com/acm/contest/5758/J
#include<stdio.h>
#include<string.h>
#define inf 0x3f3f3f3f
#include<math.h>
char a[100002];
int next[100002];
void f()
{
int i=0,t=-1;
next[i]=t;
int len=strlen(a);
while(i<len)
{
if(a[t]==a[i]||t==-1)
{
i++;
t++;
next[i]=t;
}
else t=next[t];
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(next,0,sizeof(next));
scanf("%s",a);
f();
int max=0,i;
int len=strlen(a);
for(i=0; i<=len; i++)
if(max<next[i])max=next[i];
printf("%d\n",max);
}
return 0;
}