您的位置:首页 > 其它

Suffix_Array模板重置版

2017-02-04 14:43 316 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: