Description
输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成功,则输出0;
Input
输入一个主串和一个子串
匹配Sample Input的趟数
Sample Input
ababcabcacbab abcacSample Output
3代码:
#include <iostream>
#include <cstring>
using namespace std;
int len,lens;
void getnext(char str[],int next[])
{
int i,j;
i=1;j=0;
next[1]=0;
while(i<=len)
{
if(j==0||str[i]==str[j])
{
++i;++j;
next[i]=j;
}
else
j=next[j];
}
}
int kmpindex(char s[],char str[])
{
int i,j,p;
i=1;j=1;p=1;
int next[10000];
getnext(str,next);
while(i<=lens&&j<=len)
{
if(j==0||s[i]==str[j])
{
i++;
j++;
}
else
{
j=next[j];
p++;
}
}
if(j>len)
return p;
}
int main()
{
char str[10000];
char s[100000];
int i,j;
cin>>s;
cin>>str;
lens=strlen(s);
len=strlen(str);
for(j=len;j>0;j--)
str[j]=str[j-1];
int k;
for(k=lens;k>0;k--)
{
s[k]=s[k-1];
}
int num;
num=kmpindex(s,str);
cout<<num<<endl;
return 0;
}