首页 > 代码库 > hihoCoder 1015KMP
hihoCoder 1015KMP
#include <iostream> #include <algorithm> #include <stdio.h> #include <math.h> #include <string.h> using namespace std; #define N 2000010 char s[N],p[N]; int next1[N]; int kmp(char* s, char* p) { int num=0; int i = 0; int j = 0; int sLen = strlen(s); int pLen = strlen(p); while (i < sLen && j < pLen) { if (j == -1 || s[i] == p[j]) { i++; j++; } else { j = next1[j]; } if(j==pLen) { num++; j = next1[j]; } } return num; } ///求部分匹配表 void GetKMPNext(char* p, int next[]) { int pLen = strlen(p); next1[0] = -1; int k = -1; int j = 0; while (j < pLen) ///计算到0 - len { if (k == -1 || p[j] == p[k]) { ++j; ++k; if (p[j] != p[k]) next1[j] = k; else next1[j] = next1[k]; } else { k = next1[k]; } } } int main() { //freopen("input.txt","r",stdin); int T; scanf("%d",&T); while(T--){ scanf("%s %s",p,s); //p为模式串 GetKMPNext(p,next1); printf("%d\n",kmp(s,p)); } return 0; }
hihoCoder 1015KMP
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。