字符串
aszmq
小乞丐努力中……
展开
-
后缀数组
int sa[N+10],c[N+10],wa[N+10],wb[N+10];bool cmp(int *y,int a,int b,int l){ return y[a]==y[b]&&y[a+l]==y[b+l];}void suffix(string r){ int i,j,p,*rank=wa,*y=wb,n=r.length(),m=255; for(i=0;i<m;i++)原创 2013-08-23 16:15:25 · 599 阅读 · 0 评论 -
poj 2774/poj 1743/poj 3261后缀数组应用
最近看的后缀数组,做了几个应用。 1、poj 2774 求两个字符串的最长公共子串。 思路:将第二个串接到第一个串的后面,第一个串的结尾和第二个串的结尾分别用一个不会出现的字符标记,第二个串的结尾标记值要小。 用大牛的模板求出sa,height,rank数组。然后去遍历数组求前面的和后面的最大公共前缀。判定的时候注意判定条件,我在判定的时候原创 2013-08-25 11:03:55 · 555 阅读 · 0 评论 -
回文串O(n)算法 Manacher算法
网上说求回文串有三种算法,lcs的n^2算法,后缀数组n*log(n),manacher的时间复杂度是O(n)的。我以前只会n^2的算法,刚学的这个算法。void manacher(){ int id,mx=0,len; len=strlen(cstr); for(int i=1;i<len;i++){ if(mx>i) p[i]=min(p[id*2-i],mx-i);原创 2013-08-17 15:39:32 · 732 阅读 · 0 评论