//深入理解next数组(算法导论上的)
//错误原因:等号写成了赋值号,自己还真犯这个错误了
// 这儿还是有点小疑问,ababa这样的串,求出的next为00123
//则5-next[5]=2,即串的长度为2,可本来前缀和后缀相等的串为aba长度为3,可见len-next[len]求的是不相互包含的串的长度
//即为求的ab,我们需要添加的即为(len-next[len])-len%(len-next[len])
#include<iostream>
using namespace std;
char s[100005];
int next[100005];
int T;
int get_prefix(int len){
int k=0;
int p;
for(p=2;p<=len;p++){
while(k>0&&s[k+1]!=s[p])
k=next[k];
if(s[k+1]==s[p])
k=k+1;
next[p]=k;
}
}
int main(){
cin>>T;
while(T--){
scanf("%s",s+1);
memset(next,0,sizeof(next));
int len=strlen(s+1);
get_prefix(len);
if(len%(len-next[len])==0&&len!=len-next[len])
cout<<"0"<<endl;
else
cout<<(len-next[len])-len%(len-next[len])<<endl;
}
system("pause");
return 0;
}
hdu 3746
最新推荐文章于 2021-02-04 11:08:16 发布