1 条题解
-
0
C++ :
#include <iostream> #include <cstring> #include <stdio.h> #include <stdlib.h> #include <algorithm> using namespace std; const int N = 1000002; int Next[N]; char S[N], T[N]; int slen, tlen; void getNext() { int j, k; j = 0; k = -1; Next[0] = -1; while(j < tlen) if(k == -1 || T[j] == T[k]) Next[++j] = ++k; else k = Next[k]; } /* 返回模式串在主串S中出现的次数 */ int KMP_Count() { int ans = 0; int i, j = 0; if(slen == 1 && tlen == 1) { if(S[0] == T[0]) return 1; else return 0; } for(i = 0; i < slen; i++) { while(j > 0 && S[i] != T[j]) j = Next[j]; if(S[i] == T[j]) j++; if(j == tlen) { ans++; j = Next[j]; } } return ans; } int main() { scanf("%s",S); scanf("%s",T); slen = strlen(S); tlen = strlen(T); getNext(); printf("%d\n",KMP_Count()); return 0; }
- 1
信息
- ID
- 1016
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 6
- 已通过
- 0
- 上传者