#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<queue>#include<stack>usingnamespace std;constint MAX =1000010;char T[MAX], P[MAX];int n, m, cnt =0;intmain(){scanf("%s %s", T, P);
n =strlen(T), m =strlen(P);for(int i=0, j; i<n-m+1; i++)//暴力解法{for(j=0; j<m && T[i+j]== P[j]; j++);if(j == m) cnt++;}printf("%d\n", cnt);return0;}
#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<queue>#include<stack>usingnamespace std;constint MAX =1000010;char T[MAX], P[MAX];int n, m, cnt =0;voidgetNext(char S[],int len,int next[])//计算next数组{
next[0]=-1;int j =-1;for(int i =1; i < len; i++){while(j !=-1&& S[i]!= S[j+1]) j = next[j];if(S[i]== S[j+1]) j++;
next[i]= j;}}intmain(){int next[MAX]={0};scanf("%s %s", T, P);
n =strlen(T), m =strlen(P);getNext(P, m, next);for(int i =0, j =-1; i < n; i++)//KMP算法{while(j !=-1&& T[i]!= P[j+1]) j = next[j];//失配,j需要回溯if(T[i]== P[j+1]) j++;if(j == m-1)//匹配成功,计数器加1,j回溯{
cnt++;
j = next[j];}}printf("%d\n", cnt);return0;}