首页 > 代码库 > HDU - 1686 Oulipo

HDU - 1686 Oulipo

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1686

又是一道字符串匹配问题,同样也是KMP算法,就是多记一下模式串的重复频率。

 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn=10000+5,maxm=1000000+10; 4 char word[maxn],text[maxm]; 5 int next[maxn]; 6 void get_next(int n) 7 { 8     int i=0,j=-1; 9     next[i]=j;10     while(i<n){11         if(j==-1 || word[i]==word[j]) {j++;i++;next[i]=j;}12         else j=next[j];13     }14 }15 int get_occurrence(int len1,int len2)16 {17     int i=0,j=0,num=0;18     while(i<len2 && j<len1){19         if(j==-1 || word[j]==text[i]) {i++;j++;}20         else j=next[j];21         if(j==len1){22             num++;23             j=next[j];24         }25     }26     return num;27 }28 int main()29 {30     int t;31     scanf("%d",&t);32     while(t--){33         scanf("%s%s",word,text);34         int len1=strlen(word),len2=strlen(text);35         get_next(len1);36         int ans=get_occurrence(len1,len2);37         printf("%d\n",ans);38     }39     return 0;40 }