【day-13】KMP完整版+升级版

来源:互联网 发布:敏捷网络的五个理念 编辑:程序博客网 时间:2024/06/06 03:55
#include <iostream>#include <vector>using namespace std;template<class T>void print_vector(vector<int> input){    for(auto it=input.begin(); it!=input.end(); ++it)    {        cout<<*it<<" ";    }    cout<<endl;}vector<int> NEXT_v2(const string &partten){    vector<int> next(partten.size());    int k=-1;    int i=0;    next[0]=-1;    while(i<partten.size())    {        if(k==-1 || partten[i]== partten[k])        {            if(partten[++i]==partten[++k])            {                next[i]=next[k];            }            else            {                next[i]=k;            }        }        else        {            k=next[k];        }    }    return next;}vector<int> NEXT(const string &partten){    vector<int> next(partten.size());    int k=-1;    int i=0;    next[0]=-1;    while(i<partten.size())    {        if(k==-1 || partten[i]== partten[k])        {            next[++i]=++k;        }        else        {            k=next[k];        }    }    return next;}/*AB0123456789AAAABCD11------------AAAABCD0123456789012*/int main(){    string str("AB0123456789AAAABCD11");    string partten("AAAABCD");    int str_index=0,partten_index=0;    vector<int> next=NEXT(partten);    print_vector<int>(next);    vector<int> next_v2=NEXT_v2(partten);    print_vector<int>(next_v2);    while( partten_index!=partten.size() && str_index!=str.size() )    {        if(str[str_index]==partten[partten_index])        {            str_index++;            partten_index++;        }        else        {            if(partten_index==0)            {                str_index++;            }            else            {                partten_index=next[partten_index];            }        }    }    //匹配成功,返回下标    if(partten_index==partten.size())    {        cout<<str_index-partten_index<<endl;    }    else    {        cout<<"Not Found!\n"<<endl;    }    return 0;}

0 0
原创粉丝点击