B - KMP模式匹配 二(串)

来源:互联网 发布:ubuntu 安装中文支持 编辑:程序博客网 时间:2024/06/05 01:56
B - KMP模式匹配 二(串)
Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
Submit Status

Description

输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成功,则输出0;

Input

输入一个主串和一个子串

Output

匹配Sample Input的趟数

Sample Input

ababcabcacbababcac
Sample 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;}





0 0