首页 > 学院 > 开发设计 > 正文

KMP算法

2019-11-08 02:31:38
字体:
来源:转载
供稿:网友

刚刚看完Matrix67大大的博客,手痒就写了一个,本人是个大一新生,不喜勿喷。

这里我在VS2015上调试了好几次,发现果然VS里面有好多坑爹玩意,以后还是用Dev-C++老老实实写代码吧。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAX = 10001;int P[MAX];void get_next(char b[], int m){	int k = 0;	P[1] = 0;	for (int i = 2; i < m; i++)	{		while (k > 0 && b[k + 1] != b[i])			k = P[k];		if (b[k + 1] == b[i])			k++;		P[i] = k;	}}int KMP(char A[], int lenA, char B[], int lenB){	int res = 0,j=0;		get_next(B + 1, lenB);	for (int i = 0; i <= lenA; i++)	{		while (j > 0 && A[i] != B[j + 1])			j = P[j];		if (B[j + 1] == A[i])			j++;		if (j == lenB)		{			res++;			j = P[j];		}	}	return res;}int main(){	char a[MAX], b[MAX];	int len_a, len_b;	int T;		scanf("%d", &T);	while (T--) 	{		memset(P, 0, MAX);		scanf("%s", a + 1);		scanf("%s", b + 1);		len_a = strlen(a + 1); len_b = strlen(b + 1);			PRintf("%d/n", KMP(a + 1, len_a, b + 1, len_b));	}			return 0;}

但是VS2015真TM好用,不想放弃。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表