#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int Next[maxn]; //用来存放字符串p的最长公共前缀后缀
void Build_Next(char* p, int n) {
Next[0] = 0; //前1个字母只有一个字母
int len = 0;
int i = 1;
while (i < n) {
if (p[i] == p[len]) { //如果匹配成功,长度加加
len++;
Next[i] = len;
i++;
}
else {
if (len > 0) //防止len越界
len = Next[len - 1];
else { //当len = 0时,跳出本次循环
Next[i] = 0;
i++;
}
}
}
}
int main() {
char s[] = "ABABCABAA";
int n = 9;
Build_Next(s, n);
for (int i = 0; i < n; i++) {
cout << Next[i] << " ";
}
return 0;
}
模板——KMP(Next数组的初始化(版本一))
最新推荐文章于 2023-04-06 19:49:57 发布