poj 2406 求连续重复子串出现的次数 后缀数组 (二)

2014-11-24 00:40:31 · 作者: · 浏览: 10
f[i]=mmin;
mmin=mmin
}
mmin=999999999;
for(i=j+1;i<=n;i++)
{
mmin=mmin f[i]=mmin;
}

}

int main()
{
int i,n;
while(scanf("%s",str)!=EOF)
{
n=strlen(str);
if(n==1&&str[0]=='.') break;
for(i=0;i r[n]=0;
dc3(r,sa,n+1,123);//千万注意+1
calheight(r,sa,n);
// initRMQ(n);
/*
for(i=0; i
printf("rank[%d] = %d\n",i,rank[i]);
printf("\n");
for(i=0; i printf("sa[%d] = %d\n",i,sa[i]);
*/
int len;
int mmax=0;
get_f(n);
for(len=1;len<=n;len++)
{
if(n%len==0)
{
if(f[rank[len]]==(n-len))
///注意是rank[len],因为这里在求0和0+len的lcp ,即要求rank[0]到rank[len]之间的最小height值
{
mmax=n/len;
break;
}
}

}
if(mmax!=0)
printf("%d\n",mmax);
else printf("1\n");
}
return 0;
}