Pagini recente » Cod sursa (job #1258118) | Cod sursa (job #1644412) | Cod sursa (job #1554442) | Cod sursa (job #580851) | Cod sursa (job #1103)
Cod sursa(job #1103)
#include <stdio.h>
#include <string.h>
#define nmax 1000005
char s[nmax];
int t,n,p[nmax],pref[nmax];
int kmp_calculeaza() {
n=strlen(s)-1;
long k=0;
p[1]=0;
pref[0]=1;
int max=0;
for(int i=2;i<=n;i++) {
while ((k>0) && (s[k+1]!=s[i])) k=p[k];
if(s[k+1]==s[i]) k++;
p[i]=k;
if ((p[i]>0) && (i % (i-p[i])==0)) max=i;
}
/* for(int i=1;i<=n;i++) printf("%d ",p[i]);
printf("\n");
for(int i=1;i<=n;i++) printf("%d ",pref[i]);
printf("\n");*/
return max;
}
int main() {
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n",&t);
for(int i=1;i<=t;i++) {
memset(s,0,sizeof(s));
scanf("%s\n",&s);
for(int j=strlen(s);j>=1;j--) s[j]=s[j-1];
printf("%d\n",kmp_calculeaza());
}
return 0;
}