KMP

 

简单记录一下kmp的算法模板

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#define ll long long
#define pi 3.1415927
using namespace std;
string s, t;
int f[1000];
void get_f(string t)
{
    //对要查找的字符串进行匹配,寻找重复的地方
    int i=0,j=-1;
    f[0]=-1;
    int len=t.length();
    while(i<len)
    {
        if(j==-1 || t[i]==t[j])
        {
            i++;
            j++;
            f[i]=j;
        }
        else
            j=f[j];
    }
}
int kmp ()
{
    int lens=s.length();
    int lent=t.length();
    int i=0,j=0;
    //遍历,相同继续,不同则找之前记录的要查找字符的相同位置开始遍历
    while(i<lens)
    {
        if(j==-1 || s[i]==t[j])
        {
            i++;
            j++;
            if(j==lent)
                return 1;
        }
        else
            j=f[j];
    }
    return 0;
}
int main ()
{
    int n,m,i,j,k;
    cin>>s>>t;
    get_f(t);
    for(i=0;i<10;++i)
        cout<<f[i]<<" ";
    cout<<endl;
    cout<<kmp();

    return 0;
}

 

posted @ 2019-07-26 15:56  blowhail  阅读(117)  评论(0编辑  收藏  举报
Live2D