KMP算法求模式串在原串中出现的次数
2017-09-29 21:14
260 查看
#include <iostream> #include <cstring> #include <stdio.h> #include <stdlib.h> #include <iomanip> #include <algorithm> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define maxn 110000 const double PI = acos(-1.0); typedef long long ll; int Next[maxn]; char a[1000]; void get_next(char a[]); int KMP(char a[], char b[]); int main() { char b[maxn] ; char a[maxn]; while(cin >> a >> b) { int sum = KMP(a, b); cout << sum << endl; } return 0; } void get_next(char a[]) { int i = 0, j = -1; Next[0] = -1; while(a[i] != '\0') { if(j == -1 || a[i] == a[j]) { i++; j++; Next[i] = j; } else j = Next[j]; } } int KMP(char a[], char b[]) { get_next(b); int sum = 0; int lena = strlen(a); int lenb = strlen(b); int i = 0, j = 0; while(i < lena && j < lenb) { if(j == -1 || a[i] == b[j]) { ++i; ++j; //此处开始与KMP常规算法不同,以此为找到模式串的标志并尽心回溯 if(j == lenb) { sum++; j = Next[j]; } } else j = Next[j]; } return sum; }
相关文章推荐
- KMP算法之查找模式串在源串中出现的次数
- (串的模式匹配4.6.2)POJ 3461 Oulipo(KMP算法的应用——求一个单词在一行文本中的出现次数)
- KMP算法之查找模式串在源串中出现的次数
- hiho-kmp 计算模式串在原串中出现的次数
- KMP:计算模式串出现的次数
- POJ 3461 Oulipo (求模式串在文本串中出现的次数)
- (字符串的模式匹配4.7.18)POJ 1961 Period(求一个串到第i个字符循环节出现的次数)
- LightOJ 1427 求每个模式串在母串中出现的次数
- [KMP求模式在主串出现次数]POJ 3461 Oulipo
- //////////编程实现:求模式串T在目标串S中出现的次数和每次
- COJ 1287 求匹配串在模式串中出现的次数
- HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
- POJ3461 KMP简单变形输出模式串在主串出现的次数
- 【KMP算法】KMP统计子串出现次数
- hdoj 3065 病毒侵袭持续中 【AC自动机 基础题】【输出每个模式串出现的次数】
- KMP算法解决字符串出现次数
- 使用KMP算法求子串出现次数
- HDU 1686 Oulipo (KMP——统计模式串出现次数)
- 【hiho一下第三周】KMP计算模式串在原串出现次数