求周期串,从末尾开始观察是否有周期串,没有就加一个和p[i]+1相等的字符,直到出现周期串
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
string a;
int len;
int p[100005];
int init()
{
int i,j;
i=0;
j=-1;
p[0]=-1;
while(i<a.size())
{
if(j==-1||a[i]==a[j])
{
p[++i]=++j;
}
else
j=p[j];
}
int t=p[i];
while(t==0||i%(i-t)!=0)//找循环节
{
i++;
t++;
}
return (i-a.size());
}
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
cin>>a;
len=a.size();
int i;
int ans=0x3f3f3f3f;
ans=min(ans,init());
reverse(a.begin(),a.end());
cout<<min(ans,init())<<endl;
}
return 0;
}