KMP算法原理详解参考链接
KMP算法用C++实现字符串匹配
vector<int> GetNext(const string& p)
{
vector<int> next(p.size(), -1);
int k = -1, j = 0;
while (j < p.size()-1)
{
if (k == -1 || p[k] == p[j]){
k++;
j++;
next[j] = k;
}
else {
k = next[k];
}
}
return next;
}
int KMPSearck(const string& s, const string& p)
{
if (s.empty() || p.empty() || (s.size() < p.size())){
return -1;
}
vector<int> next = GetNext(p);
int i, j, sLen, pLen;
i = j = 0;
sLen = s.size();
pLen = p.size();
while (i < sLen && j < pLen)
{
if (j == -1 || s[i] == p[j]) {
i++;
j++;
}
else {
j = next[j];
}
}
return j == pLen ? i - pLen : -1;
}