HDU1686Oulipo KMP返回串出現的次數
http://acm.hdu.edu.cn/showproblem.php?pid=1686
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book:
Input The first line of the input file contains a single number: the number of test cases to follow. Each test case has the following format:
Output For every test case in the input file, the output should contain a single number, on a single line: the number of occurrences of the word W in the text T.
Sample Input 3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIAN
Sample Output 1 3 0 |
#include <stdio.h>
#include <string.h>
int next[10005];
char str1[1000005],str2[10005];
void getnext(int len)//此處也可以將int next[]改寫成 int* next[]
{
int j,k;
j=0,k=-1;
next[0]=-1;
while(j<len)
{
if(k==-1||str2[j]==str2[k])
{
j++,k++,next[j]=k;
}
else
{
k=next[k];
}
}
//利用待匹配串進行求解next陣列
}
int kmp(int len1,int len2)//kmp演算法
{
int count=0;
int i=0,j=0;
getnext(len2);
while(i<len1)//是文字串長度;
{
if(j==-1||str1[i]==str2[j])
{
++i,++j;
}
else
{
j=next[j];
}
if(j==len2)
{
count++;
j=next[j];
}
}
return count;
}
int main()
{
int Case;
int len1,len2;
scanf("%d",&Case);
getchar();//注意吸收空格
while(Case--)
{
gets(str2);
gets(str1);
len1 = strlen(str1), len2 = strlen(str2);
printf("%d\n",kmp(len1,len2));
}
return 0;
}