先把代码放这了,有空了再研究
//KMP模板
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int nxt[1000010];
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
string p = "BBACBBBA";
int len = p.size();
int j = -1;
nxt[0] = -1;
for(int i = 1;i<len;++i){
if(p[j+1] != p[i] && j != -1) j = nxt[j];
if(p[j+1] == p[i]) ++j;
nxt[i] = j;
}
for(int i = 0;i<len;++i){
cout << nxt[i] << " \n"[i ==len-1];
}
return 0;
}