字符串 kmp算法 codeforce 625B 题解(模板)

 

 

 

题解:kmp算法

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <stdio.h>
using namespace std;
const int maxn=1000;
char str[maxn],pattern[maxn];
int Next[maxn];
int cnt;
int getFail(char *p,int plen)
{
    Next[0]=0;
    Next[1]=0;
    for(int i=1;i<plen;i++)
    {
        int j=Next[i];
        while (j&&p[i]!=p[j])
            j=Next[j];
        Next[i+1]=(p[i]==p[j])?j+1:0;
    }
}
int kmp(char *s,char*p)
{
    int slen=strlen(s),plen=strlen(p);
    getFail (p,plen);
    int j=0;
    for(int i=0;i<slen;i++)
    {
        while (j&&s[i]!=p[j])
            j=Next[j];
        if(s[i]==p[j])
            j++;
        if(j==plen)
        {
            cnt++;
        }
    }
}
int main ()
{
    while(~scanf("%s%s",str,pattern))
    {
        cnt=0;
        kmp(str,pattern);
        cout<<cnt<<endl;
    }
}

 

posted @ 2020-05-13 21:06  心不懈  阅读(144)  评论(0)    收藏  举报