基础算法 KMP
2015-10-02 17:33
417 查看
才学了KMP算法,我就发一个模板。
#include<cstdio> #include<cstring> #define MAXN 1000000 using namespace std; int next[MAXN+5]; char a[MAXN+5],b[MAXN+5]; void getnext(char *s) { int len=strlen(s),i; next[0]=-1; for(i=1;i<len;i++) { int j=next[i-1]; while(j!=-1&&s[j]!=s[i-1]) j=next[j]; next[i]=j+1; } } int kmp(char *s1,char *s2) { int i,j,len1=strlen(s1),len2=strlen(s2); if(len1<len2) return -1; for(i=0,j=0;i<=len1;i++,j++) { if(j==len2) return i-j; if(i==len1) return -1; while(j!=-1&&s1[i]!=s2[j]) j=next[j]; } return -1; } int main() { scanf("%s%s",a,b); getnext(b); int site=kmp(a,b); if(site!=-1) printf("yes\n%d\n",site); else printf("no\n"); }
相关文章推荐
- 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提交验证类
- Android数据存储通用策略
- Sudoku Solver
- 简单导航页制作--代码
- 在一个数组中查找两个重复出现两次的数