hihoCoder 1015 KMP算法
2017-05-17 14:23
417 查看
题意:经典字符串匹配算法。给定原串和模式串,求模式串在原串中出现的次数。算法讲解
AC代码
如有不当之处欢迎指出!
AC代码
#include <cstdio> #include <cmath> #include <cctype> #include <bitset> #include <algorithm> #include <cstring> #include <utility> #include <string> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> typedef long long LL; const int maxn = 1e4 + 5; char T[maxn*100], p[maxn]; int nex[maxn]; void getNext(char *P, int *nex, int len) { nex[0]= -1; for(int i = 1; i < len; ++i) { int j = nex[i-1]; while(j >= 0 && p[j+1] != p[i]) j = nex[j]; if(p[j+1] == p[i]) nex[i] = j+1; else nex[i] = -1; } } //统计模式串出现的次数 int KMP(char *T, char *p, int *nex) { int n = strlen(T), m = strlen(p); getNext(p, nex, m); int j = -1, cnt = 0; for(int i = 0; i < n; ++i) { while(j >= 0 && T[i] != p[j+1]) j = nex[j]; if(T[i] == p[j+1]) j++; if(j == m-1) { cnt++; j = nex[j]; } } return cnt; } int main() { int n; scanf("%d", &n); while(n--) { scanf("%s%s", p, T); printf("%d\n", KMP(T, p, nex)); } return 0; }
如有不当之处欢迎指出!
相关文章推荐
- KMP hihoCoder1015 KMP算法
- hihoCoder 1015 KMP算法(kmp)
- hihoCoder 1015 kmp算法
- hihoCoder - 1015 - KMP算法
- hihocoder 1015 KMP算法 (KMP模板)
- hihocoder 1015 : KMP算法(kmp)
- hihocoder 1015 : KMP算法(kmp)
- hihoCoder 1015 KMP算法(kmp)
- hihoCoder 1015 KMP算法
- hihoCoder 1015 KMP算法
- hihocoder-1015 KMP算法(KMP)
- hihoCoder 1015 KMP算法
- hihoCoder 1015 : KMP算法
- KMP算法模板及问题解决(HDU 1711)(hihocoder 1015 KMP)(HDU 1686)(POJ3461)(HDU1358)
- hihoCoder 1015 KMP算法
- [HihoCoder]#1015 : KMP算法
- hihocoder 1015 KMP算法
- hihocoder 1015 KMP算法
- hihocoder 1015 KMP算法
- hihoCoder 1015 : KMP算法