说明
这部分完全就是在书本上的程序上改的。
程序
int Testlib::kmp(string T, string S)
{
if(T.empty()||S.empty())
return -1;
uint Tsize=T.size();
uint Ssize=S.size();
vector<int> next(Ssize);
makeNext(S);
int j=0;
for(uint i=0;i<Tsize;i++)
{
while(j>0&&T[i]!=S[static_cast<uint>(j)])
{
j=next[static_cast<uint>(j-1)];
}
if(T[i]==S[static_cast<uint>(j)])
j++;
if(static_cast<uint>(j)==S.size())
return static_cast<int>(i)-j+1;
}
return -1;
}
最后
无