基础算法 扩展KMP
2015-10-02 17:34
435 查看
继续发模板……
#include<cstdio> #include<cstring> #define MAXN 1000000 using namespace std; inline int max(int a,int b){return a>b?a:b;} int next[MAXN+5],ex[MAXN+5]; char a[MAXN+5],b[MAXN+5]; void getdata(char *s1,char *s2,int *data) { int i,j,k; int len1=strlen(s1),len2=strlen(s2); for(i=0,j=0;i<len1&&j<len2&&s1[i]==s2[j];i++,j++); data[0]=j; for(i=1,j=0;i<len1&&j<len2&&s1[i]==s2[j];i++,j++); data[1]=j; int maxi=1,maxp=0; for(i=2;i<len1;i++) { if(i+next[i-maxi]<maxp) data[i]=next[i-maxi]; else { for(k=max(maxp,i);k<len1&&k-i<len2&&s1[k]==s2[k-i];k++); maxp=k; maxi=i; data[i]=(k-i)>0?k-i:0; } } } int main() { scanf("%s%s",a,b); int len=strlen(a); getdata(b,b,next); getdata(a,b,ex); printf("%d",ex[0]); for(int i=1;i<len;i++) printf(" %d",ex[i]); }
相关文章推荐
- 算法导论第九章中位数和顺序统计量(选择问题)
- 最大熵模型的简单理解
- 581C
- 基础算法 KMP
- typedef
- 使用堆栈将缺少左括号的表达式补全并计算其值
- light oj 1384 - Stream My Contest (最小树形图+二分)
- apache 占用内存总量与每个apache进程的平均内存占用量计算
- Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout
- hihoCoder 1234 Fractal
- 从源码的角度详解View,ViewGroup的Touch事件的分发机制
- 计算器
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- 2015 四川省赛 I Travel(bfs)
- hdu 3790 双权值最短路径
- 软工之测试与维护
- 弱校联萌十一大决战之强力热身 A. Easy Math (水)
- 【分享】如何尊重一个程序员?
- Peacock:大规模主题模型及其在腾讯业务中的应用
- js 验证表单 js提交验证类