#include<string.h>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int Next[maxn] = { 0 }; //Next的第0位只有一个字符
char str[maxn], mo[maxn];
void get_Next() {
int n = strlen(mo); //模式串的长度
int l = 0, r = 1;
while (r < n) {
if (mo[l] == mo[r]) { //如果匹配成功,说明l的左边也是匹配成功的,故长度加一
Next[r++] = ++l;
}
else {
if (l >= 1) { //防止越界
l = Next[l - 1];
}
else {
Next[r++] = 0; //在第0位都不匹配,Next就为0
}
}
}
}
int main() {
int n;
cin >> mo >> n;
get_Next();
for (int i = 0; i < n; i++) {
cout << Next[i] << " ";
}
return 0;
}
模板——KMP(Next数组的初始化(版本二))
最新推荐文章于 2023-03-22 16:05:10 发布