刚刚看完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好用,不想放弃。
新闻热点
疑难解答