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

kmp算法的个人理解

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

KMP算法

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

字符串匹配——KMP算法(C++)

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