Suffix_Array模板重置版

来源:互联网 发布:非农历史数据一览表 编辑:程序博客网 时间:2024/04/30 04:52
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;}
1 0