扩展KMP模板
2018-02-02 12:18
363 查看
const int N=1e5+10; //文本串长度 const int M=1e5+10; //模式串长度 char a ; //文本串 char b[M]; //模式串 int next0[M],extend ; void get_next() { int len=strlen(b); next0[0]=len; int i=0; while(i<len-1&&b[i]==b[i+1]) ++i; next0[1]=i; i=1; for(int k=2;k<len;++k) { int p=i+next0[i]-1; int L=next0[k-i]; if(k-1+L>=p) { int j=(p-k+1)>0?(p-k+1):0; while(k+j<len&&b[k+j]==b[j]) ++j; next0[k]=j; i=k; } else next0[k]=L; } } void get_extend() //extend[i]保存以a[i]为起始的文本串与模式串的最大公共前缀长度 { int i=0,j,po,alen=strlen(a),blen=strlen(b); get_next(); while(a[i]==b[i]&&i<alen&&i<blen) i++; extend[0]=i; po=0; for(i=1;i<alen;i++) { if(next0[i-po]+i<extend[po]+po) extend[i]=next0[i-po]; else { j=extend[po]+po-i; if(j<0) j=0; while(i+j<alen&&j<blen&&a[j+i]==b[j]) j++; extend[i]=j; po=i; } } }
相关文章推荐
- HDU 3613 Best Reward(扩展KMP模板)
- 扩展kmp模板
- 【HDU6153 2017中国大学生程序设计竞赛 - 网络选拔赛 D】【KMP 或 扩展KMP】A Secret 匹配串前缀中含有的模板串前缀长度和
- ccpc 2017 网络赛 1004 A Secret (扩展kmp)【模板】
- 扩展KMP模板
- 扩展KMP模板
- 扩展KMP模板
- Manacher模板,kmp,扩展kmp,最小表示法模板
- 扩展kmp 模板
- HDU 3613 Best Reward(扩展KMP的应用:回文串判断+扩展KMP模板)
- 扩展KMP模板
- 【字符串】【扩展kmp模板】
- HDU 2594 - Simpsons’ Hidden Talents(扩展kmp模板)
- 扩展kmp 模板
- hdoj1841Find the Shortest Common Superstring【扩展KMP模板】
- 扩展kmp--模板解析
- kmp模板 && 扩展kmp模板
- 模板_扩展kmp
- 【模板】kmp以及扩展kmp
- 扩展kmp模板