题意:一个字符串,要求只能在字符串左右两侧添加的字符,将字符串变成最少循环2次的周期串。
题意:问:需要添加多少个字符
KMP:next数组的应用
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100010
char s[N];
int nextval[N];
int len;
void getnext(const char*s){
int i=0,j=-1;
nextval[0]=-1;
while(i!=len){
if(j==-1||s[i]==s[j]) nextval[++i]=++j;
else j=nextval[j];
}//while
}
int main(){
int T;
int length,ans;
scanf("%d",&T);
while(T--){
scanf("%s",s);
len=strlen(s);
getnext(s);
length = len-nextval[len];//最小循环周期
if(len!=length&&len%length==0) printf("0\n");//长度为最小循环周期的倍数
else{
ans=length-nextval[len]%length;
printf("%d\n",ans);
}//else
}//while
return 0;
}