#include <cstdio> #include <cstring> using namespace std; int main() { int i,len,sum; char *p; char a[3005],b[3005]; while(scanf("%s",a)&&a[0]!='#') { scanf("%s",b); len=strlen(b); sum=0; for(i=0,p=a;p=strstr(p,b);p+=len) { sum++; } printf("%d\n",sum); } return 0; }
#include <cstdio> #include <cstring> #define MAXN 1000000 using namespace std; char p[MAXN],s[MAXN]; //s 母串 int next[MAXN]; void get_next(char *P,int *next,int len1) { int j,k; j=0;k=-1;next[0]=-1; while(j<len1) { if(k==-1||p[j]==p[k]) { j++;k++; next[j]=k; } else k=next[k]; } } int kmp() { int i,j,k,len1,len2,t; i=0;j=0;k=0; len1=strlen(p); len2=strlen(s); get_next(p,next,len1); while(i<len2) { t=i; //去掉為可重疊 if(s[i]==p[j]) { i++;j++; } else { if(j==-1) {i++;j=0;} else j=next[j]; } if(j==len1) {k++;i=t+len1;} //可重疊為k++; } return k; } int main() { int n; while(scanf("%s",s)&&s[0]!='#') { scanf("%s",p); printf("%d\n",kmp()); } return 0; }