C++实现一个简单的KMP算法

Posted Jing Sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现一个简单的KMP算法相关的知识,希望对你有一定的参考价值。

如下所示,这是一个简单的烤馍片(KMP):

inline void NEXT(const string &T, vector<int>&next)

    next[0]=-1;
    for(int i=1;i<T.size();i++)
    
        int j=next[i-1];
        while(j>=0&&T[i-1]!=T[j])
            j=next[j];
            if(j>=0&&T[i-1]==T[j])
                next[i]=j+1;
            else
                next[i]=0;
    


inline string::size_type COUNT_KMP(const string&S,const string&T)

    vector<int>next(T.size());
    NEXT(T,next);
    string::size_type index,count=0;
    for(index=0;index<S.size();++index)
    
        int pos=0;
        string::size_type iter=index;
        while(pos<T.size()&&iter<S.size())
        
            if(S[iter]==T[pos])
            
                ++iter;
                ++pos;
            
            else
            
                if(pos==0)
                    ++iter;
                else
                    pos=next[pos-1]+1;
            
        
        if(pos==T.size()&&(iter-index)==T.size())
            ++count;
    
    return count;

 

以上是关于C++实现一个简单的KMP算法的主要内容,如果未能解决你的问题,请参考以下文章