KMP算法&拓展KMP算法模板
来源:互联网 发布:淘宝隐藏导航代码 编辑:程序博客网 时间:2024/05/22 06:19
KMP
char a[N],b[M];int nxt[M];int n,m;void cal_nxt(){ int i; nxt[0]=-1; for(i=1;i<m;i++) { int j=nxt[i-1]; while(j>=0&&b[i]!=b[j+1]) j=nxt[j]; nxt[i]=b[i]==b[j+1]?j+1:-1; }}int kmp(){ int i,j=0; for(i=0;i<n&&j<m;i++) { while(j>0&&a[i]!=b[j]) j=nxt[j-1]+1; if(a[i]==b[j]) j++; } return (j==m)?(i-m):-1;}
拓展KMP
char a[N],b[M];int nxt[M],ex[N];int n,m;void cal_nxt(){ int i=0; nxt[0]=m; while(b[0]==b[i+1]&&i+1<m) i++; nxt[1]=i; int po=1; for(i=2;i<m;i++) { if(nxt[i-po]+i<nxt[po]+po) nxt[i]=nxt[i-po]; else { int j=nxt[po]+po-i; if(j<0) j=0; while(i+j<m&&b[j]==b[j+i]) j++; nxt[i]=j; po=i; } }}void exkmp(){ int i=0; cal_nxt(); while(a[i]==b[i]&&i<n&&i<m) i++; ex[0]=i; int po=0; for(i=1;i<n;i++) { if(nxt[i-po]+i<ex[po]+po) ex[i]=nxt[i-po]; else { int j=ex[po]+po-i; if(j<0) j=0; while(i+j<n&&j<m&&a[j+i]==b[j]) j++; ex[i]=j; po=i; } }}
0 0
- KMP算法&拓展KMP算法模板
- 【KMP】KMP算法模板
- KMP (KMP+拓展KMP)算法总结
- kmp算法及其拓展
- 拓展kmp算法总结
- 拓展KMP算法详解
- 拓展KMP算法
- 拓展KMP算法
- 拓展kmp算法总结
- kmp算法模板
- kmp算法模板
- KMP算法模板
- KMP算法模板
- KMP算法(模板)
- KMP算法模板
- KMP算法标准模板
- KMP算法模板
- KMP算法模板
- msp430g2533之uart
- Spring核心面向接口编程小程序
- iOS base64 加密解密 通用类
- 移除ArrayList中的重复元素
- 必虎的无线路由器
- KMP算法&拓展KMP算法模板
- 调整偏暖色调(一种比较干净、透明的色调)
- iOS中UITextField的字数限制
- 过滤Revit文件中所有的构件
- Map集合的注入
- MAVEN ARCHETYPE搭建项目模板
- Android APK反编译就这么简单 详解(附图)
- Java对象与XML文件互转的几个小技巧(使用jaxb工具类)
- List集合的引入