码迷,mamicode.com
首页 > 编程语言 > 详细

KMP算法自我理解 和 模板

时间:2018-10-01 11:54:39      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:ace   模板   cin   const   bcd   bsp   using   names   算法   

 

字符串   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算法自我理解 和 模板

标签:ace   模板   cin   const   bcd   bsp   using   names   算法   

原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/9734342.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!