一、学习要点:
1.KMP算法思路了解:https://www.bilibili.com/video/av3246487?from=search&seid=11009544750632580740
2.KMP完整代码实现视频:
https://www.bilibili.com/video/av16828557/?spm_id_from=333.788.videocard.2
3.完整代码实现可运行版,参考:https://blog.csdn.net/xiaoquantouer/article/details/62444741
二、代码
#include<iostream>
#include<stdlib.h>
#include<string>
#include<vector>
using namespace std;
vector<int> getNe(string ss)
{
int n = ss.size();
vector<int> next(n);
int k = 0;
for (int i = 1; i < n; i++)
{
while (k != 0 && ss[k] != ss[i])
{
k = next[k - 1];
}
if (ss[k] == ss[i])
{
next[i] = ++k;
}
else
{
next[i] = k;
}
}
return next;
}
int KMP(string str, string ss)
{
int n = str.size();
int m = ss.size();
vector<int> next = getNe(ss);
for (int i = 0,k=0; i &