POJ3461 KMP快速字符串匹配
2016-02-01 15:43
267 查看
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int dmax=1000100; char s[dmax],p[dmax]; int next[dmax]; void get_next(char *p){ int k=-1,j=0,n=strlen(p); next[0]=-1; while (j<n){ if (k==-1 || p[k]==p[j]){ k++; j++; if (p[j]!=p[k]) next[j]=k; else next[j]=next[k]; }else k=next[k]; } } int kmp(char *s,char *p){ int i=0,j=0,x=strlen(s),y=strlen(p),ans=0; get_next(p); while (i<x){ if (j==y){ ans++; j=next[j]; } if (j==-1 || s[i]==p[j]){ i++; j++; }else j=next[j]; } if (j==y) ans++; return ans; } int main(){ int T; scanf("%d",&T); getchar(); while (T--){ memset(p,0,sizeof(p)); memset(s,0,sizeof(s)); memset(next,0,sizeof(next)); gets(p); gets(s); printf("%d\n",kmp(s,p)); } return 0; }
相关文章推荐
- 百度地图Api详解之地图标注
- Android 第六天
- 如果测试你的MongoDB应用升级?
- 如果测试你的MongoDB应用升级?
- 2016蓝桥杯假期任务之《矩形运算》
- android实现分享功能
- iOS Core Animation编程指南
- 图片擦除
- 代码冲突解决工具BeyondCompare的在SourceTree中的配置方法
- Android-NDK编译问题
- 在一个JS文件中引用另一个JS文件
- java实现简单的搜索引擎
- Android Studio导出Jar包并混淆
- Java 多线程
- HDU1879 并查集和最小生成树
- Nginx(1) - Beginner’s Guide
- 自动生成IP模拟POST访问后端程序
- JavaScript面向对象
- iOS/mac开发的一些知名个人博客
- Mac下brew安装gitk遇到错误Error in startup script: unknown color name "lime"