链接:https://ac.nowcoder.com/acm/contest/5758/J
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
有一个字符串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)
题目大意:有一个字符串s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。
请问给出一个字符串他的ac串最大长度为多少
利用kmp算法求解
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
char s[N];
int ne[N];
void get(int len)
{
ne[0]=-1;
int j=-1;
for(int i=0; i<len;)
{
if(j==-1||s[i]==s[j])
ne[++i]=++j;
else j=ne[j];
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(ne,0,sizeof(ne));
scanf("%s",s);
int n=strlen(s);
get(n);
int ans=0;
for(int i=1; i<=n; i++)
ans=max(ne[i],ans);
printf("%d\n",ans);
}
return 0;
}