KMP算法
匹配子字符串
1.暴力算法
S[N],P[N];
for(int i=1;i<n;i++){
for(int j=1;j<=m;j++){
if(s[i]!=p[j]){
break;
}
}
}
kmp算法中的next数组:
Next[i] =j
说明p[1]~p[j]=p[i-j+1] ~p[i]
比如:abcdeabc
p[8]=p[3]
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 100010;
string n, m;
int p[N], s[N];
int ne[N];
int main() {
cin >> n >> p + 1>> m >> s + 1;
for (int i = 2, j = 0; i <= n.size(); i++) {
while (j && p[i] != p[j + 1])j = ne[j];
if (p[i] == p[j + 1])j++;
ne[i] = j;
}
for (int i = 1, j = 0; i <= m.size(); i++) {
while (j && s[i] != s[j+1])j=ne[j];
if (s[i] == p[j + 1])j++;
if (j == n.size()) {
cout << "OK" << endl;
j == ne[j];
}
}
}