abcde a3 aaaaaa aa #
0 3
//15MS 352K #include<stdio.h> #include<string.h> #include<iostream> using namespace std; char text[1007],pattern[1007]; int next[1007],n,m; void pre() { next[0]=-1; int j=-1; for(int i=1;i<m;i++) { while(j>=0&&pattern[j+1]!=pattern[i])j=next[j]; if(pattern[j+1]==pattern[i])j++; next[i]=j; } } int kmp() { int ans=0,j=-1; for(int i=0;i<n;i++) { while(j>=0&&pattern[j+1]!=text[i])j=next[j]; if(pattern[j+1]==text[i])j++; if(j==m-1){ans++;i+=(m-1);} } return ans; } int main() { while(cin>>text) { if(strcmp(text,"#")==0)break; scanf("%s",pattern); m=strlen(pattern); n=strlen(text); pre(); printf("%d\n",kmp()); } return 0; }
HDU 2087 剪花布条 KMP,布布扣,bubuko.com
原文:http://blog.csdn.net/crescent__moon/article/details/20950547