poj 3461
题意:给你一个子串(模式串)和一个母串(文本),问子串在母串中出现的次数。
代码:
#include<iostream>
#include<fstream>
using namespace std;
char s[10012];
char t[1000012];
int next[10011];
void getnext(){
int i,j,k;
j=0;k=-1;next[0]=-1;
int len=strlen(s);
while(j<len)
if(k==-1||s[k]==s[j])
next[++j]=++k;
else
k=next[k];
}
void kmp(){
int i,j,k=0;
getnext();
i=0;j=0;
int len=strlen(t);
int len1=strlen(s);
while(i<len)
{
if(j==-1||t[i]==s[j])
{
i++;j++;
if(j==len1)
{
k++;
j=next[j];
}
}
else
j=next[j];
}
cout<<k<<endl;
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
cin>>cas;
while(cas--)
{
cin>>s>>t;
// getchar();
// scanf("%s%s",s,t);
kmp();
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号