KMP算法模板
2015-07-27 23:53
393 查看
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<vector> using namespace std; int N, fail[2000000], ANS[2000000]; char pat[2000000], text[2000000]; inline void KMP() { int n = strlen(pat); for (int i = 0; i <= n + 1; i++) fail[i] = 0; for (int i = 1; i <= n - 1; i++) { int j = i; while (j>0) { j = fail[j]; if (pat[j] == pat[i]) { fail[i + 1] = j + 1; break; } } } ANS[0] = 0; int m = strlen(text); for (int i = 0, j = 0; i <= m - 1; i++) { if (j <= n - 1 && text[i] == pat[j]) j++; else { while (j > 0) { j = fail[j]; if (text[i] == pat[j]) { j++; break; } } } if (j == n) ANS[++ANS[0]] = i - n + 1; } } int main() { scanf("%d", &N); while (N--) { cin >> pat >> text; KMP(); printf("%d\n", ANS[0]); } return 0; }
相关文章推荐
- @Autowired与@Resource的区别
- 一个菜鸟写的入门级for循环函数 请多多指教
- 1、我们第一个(极小的)机器学习应用【准备数据】
- Dom元素中的元素应用
- JS应用,表单上的一些东西
- 初识html
- Fragment的生命周期(4)
- symfony路由组件(The Routing Component)
- Linux系统管理之十二---内核编译升级
- poj_1877
- Hibernate One2Many映射关系
- xss和csrf攻击
- mongodb(四)-文档
- 如何编写Xcode 插件
- ZOJ 3882 Help Bob
- UVa 311 - Packets
- android面试题总结02 在android中本地写入一个xml文件
- 添加朋友, 数据库设计 与 实现
- Neutron - flat模式
- Spring JSR-250注解