Pagini recente » Cod sursa (job #564937) | Cod sursa (job #174747) | Cod sursa (job #1687929) | Cod sursa (job #462836) | Cod sursa (job #172074)
Cod sursa(job #172074)
#include <stdio.h>
#include <string.h>
#define maxN 100
char s[maxN];
int p[maxN];
int n, dif;
void rezolva_test();
void calcul_prefix();
bool f(int);
void rezolva_test()
{
scanf("%s\n", s+1);
n=strlen(s+1);
calcul_prefix();
bool ok;
int x;
for(x=n;x>0;--x)
{
dif = x - p[x];
ok = f(p[x]);
if(ok && dif!=x)
{
printf("%d\n",x);
return;
}
}
printf("0\n");
}
void calcul_prefix()
{
p[1]=0;
int k=0,i;
for(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;
}
}
bool f(int x)
{
if(x==dif) return true;
if(x-p[x]!=dif) return false;
return f(p[x]);
}
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int nr_teste, cnt;
scanf("%d\n", &nr_teste);
for(cnt = 0; cnt < nr_teste; ++cnt)
{
rezolva_test();
}
fclose(stdin);
fclose(stdout);
return 0;
}