这里t是要查找的子串,m是t串的长度。请问下kmp算法中next数组的含义是什么,以及下面这段代码的求法是否正确。
void getNext()
{
nxt[0] = 0;
int j = 0, i = 1;
while (i < m)
{
if (t[j] == t[i])
{
nxt[i] = ++j;
i++;
}
else if (j == 0)
{
nxt[i] = 0;
i++;
}
else
{
j = nxt[j - 1];
}
}
}
//KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)