void consturct_sa(char *s,int *sa) {
for(int i=0;i<=len;i++) {
sa[i]=i;
rnk[i]=i<len?int(s[i]):-1;
}
for(k=1;k<=len;k*=2) {
sort(sa,sa+1+len,cmp);
tmp[sa[0]]=1;
for(int i=1;i<=len;i++)
if(cmp(sa[i-1],sa[i])) tmp[sa[i]]=tmp[sa[i-1]]+1;
else tmp[sa[i]]=tmp[sa[i-1]];
for(int i=0;i<=len;i++)
rnk[i]=tmp[i];
}
return;
}
void construct_lcp(char *s,int *sa,int *lcp) {
for(int i=0;i<=len;i++) rnk[sa[i]]=i,lcp[i]=0;
lcp[sa[0]]=0;
int h=0;
for(int i=0;i<len;i++) {
int j=sa[rnk[i]-1];
if(h>0) h--;
while(i+h<len && j+h<len && s[i+h]==s[j+h]) h++;
lcp[rnk[j]]=h;
}
return;
}
Suffix_Array模板重置版
最新推荐文章于 2020-01-01 21:27:19 发布