之前对KMP一直是一知半解,最近看了左程云这本算法书,应该是讲kmp最清晰的算法书了
这本书的百度云连接为左程云《程序员代码面试指南》
kmp的实现代码如下
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
#include<utility>
#include<queue>
#include<functional>
using namespace std;
class KMP
{
//获取next数组
void getNext(const string &match, vector<int> &next)
{
if (next.size() >= 2)
next[1] = 0;
//i为match字符串下标
//j为next数组的下标
int i = 2;
int j = 0;
while (i < next.size()){
if (match[i - 1] == match[j]){
next[i] = j+1;
++j;
++i;
}
else if (j == 0)
next[i++] = 0;
else
j = next[j];
}
}
public:
int matchString(const string &s, const string &match){
if (s.size()