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算法的主要内容,如果未能解决你的问题,请参考以下文章

C++ 算法进阶系列之从 Brute Force 到 KMP 字符串匹配算法的优化之路

Linux GCC下strstr的实现以及一个简单的Kmp算法的接口

KMP模式匹配算法简单概述(c语言实现)

KMP算法 C++版本 Python版本

KMP算法,这是我看到的最简单的最好理解的KMP算法

KMP算法