hdu 2087 kmp

http://acm.hdu.edu.cn/showproblem.php?pid=2087

    算是模板题吧,找到一个子串之后将模板串指针归零否则会重复计算。

  

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int nex[1010];
 4 char s[1005],t[1005];
 5 void kmp()
 6 {
 7   int szs=strlen(s),szt=strlen(t),i,j,k;
 8   nex[0]=nex[1]=0;
 9   for(i=1;i<szt;++i)
10   {
11       j=nex[i];
12       while(j&&t[i]!=t[j]) j=nex[j];
13       nex[i+1]=t[i]==t[j]?j+1:0;
14   }
15   int ans=0;
16   j=0;
17   for(i=0;i<szs;++i)
18   {
19       while(j&&s[i]!=t[j]) j=nex[j];
20       if(s[i]==t[j]){
21       if(j+1==szt){j=0;ans++;}
22       else j++;
23       }
24   }
25   printf("%d\n",ans);
26 }
27 int main()
28 {
29     while(scanf("%s",s)!=EOF){
30         if(!strcmp(s,"#")) break;
31         scanf("%s",t);
32         kmp();
33     }
34 }

 

posted @ 2017-09-24 17:15  *zzq  阅读(105)  评论(0编辑  收藏  举报