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算法的主要内容,如果未能解决你的问题,请参考以下文章
Linux GCC下strstr的实现以及一个简单的Kmp算法的接口