代码模板
void get_next(string t, int next[]) {
int i = 1, j = 0;
next[1] = 0;
while (i<=t.length())
{
if (j == 0 || t[i] == t[j]) {
//next[++i]=++j;
++i;
++j;
next[i] = j;
}
else {
j = next[j];
}
}
}
参考地址
https://www.bilibili.com/video/BV16X4y137qw?from=search&seid=10416618682341157297&spm_id_from=333.337.0.0
KMP算法简化(看门牌算法)
原理
我认为next[ ]数组最精辟之处就在下面两句话中:
- next[j+1]的最大值就是next[j]+1
- 如果Pk1!=Pj,那么next[j+1]可能的次大值就是next[next[j]]+1,按照这条公式可以更加高效的求出next[j+1]。
原理图