题目:
http://acm.hdu.edu.cn/showproblem.php?pid=3746
只需要判断
lena%(lena-next[lena])==
0
即可
.
#include <stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 1000000
using namespace std;
int next[MAX];
char a[MAX];
int lena;
void getnext(char *p)
{
int i = 0, j = -1;
next[0]= -1;
while(i != lena)
{
if(j ==-1 || p[i] == p[j])
{
++i,++j;
//if(p[i] != p[j])
next[i] = j;
//else //abcabca
// next[i] = next[j];
}
else
j =next[j];
}
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",a);
lena =strlen(a);
memset(next,0,sizeof(next));
getnext(a);
int length =lena - next[lena];
if((length!= lena)&& (lena % length == 0)){
printf("0\n");
}
else{
int ans = length - lena %length;
printf("%d\n",ans);
}
}
return 0;
}