KMP算法自我理解 和 模板

Posted andromeda-galaxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法自我理解 和 模板相关的知识,希望对你有一定的参考价值。

 

字符串   abcd abc abcd abc

匹配串   cdabcd

匹配串的 next  0 0 0 0 1 2;

 开始匹配 

      abcd abc abcd abc

          cd abc d

a,d 匹配失败 

    next 数组进行移动  

    abcd abc abcd abcd

                 c dabcd

    再次匹配

模板

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int nt[1000];
//  next 数组首位为  0
int KMP(string ss,string tt)
{
    nt[0]=0;
    for(int p=1,k=0;p<tt.size();p++)
    {
        while(k>0 && tt[k]!=tt[p])
            k=tt[k-1];
        if(tt[k]==tt[p])
            k++;
        nt[p]=k;
    }  // 构建 next 数组
    for(int p=1,k=0;p<ss.size();p++)
    {
        while(k>0&& ss[p]!=tt[k])
            k=tt[k-1];
        if(ss[p]==tt[k])
            k++;
        if(k==tt.size())
        {
            cout<<"数组下标开始"<<p-tt.size()+1<<"   "<<p<<endl;
            return 1;
        }
    }
    return 0;
}
int main()
{
    string ss,tt;
    cin>>ss>>tt;
    cout<<KMP(ss,tt)<<endl;
}

 

以上是关于KMP算法自我理解 和 模板的主要内容,如果未能解决你的问题,请参考以下文章

kmp算法模板及理解

KMP的自我理解

KMP 算法

kmp算法的个人理解

KMP算法的理解和代码实现

KMP算法模板