exKMP小结
KMP传送门
用途:现有长度为n的文本串S与长度为m的模式串T,求文本串S的每一个后缀,与模式串T的最大公共长度。
复杂度:空间O(n + m), 时间O(n + m)
用法: 假设字符串起始下标均从1开始,那么Next[i]表示的是模式串T从i开始的后缀与其自身的最长匹配长度,而extend[i]表示的是文本串从i开始的后缀与模式串T的最长匹配长度。在读入文本串S与模式串T并且分别设置好长度n和m之后,直接调用函数exKMP()即可得到extend数组和Next数组。
例题: hdu2594, hdu3336, hdu4300, hdu1238, hdu4763, cf1466G
char T[maxn], S[maxn];
int Next[maxn], extend[maxn], n, m;
//T存放模式串,下标从1开始,m表示模式串长度,Next表示模式串从第i个字符开始形成的后缀与他自身的最长匹配长度
void getNext(char *T, int m, int * Next)
{
int a = 1, p = 1;
Next[