KMP算法
前言
当我第一次接触KMP算法的时候我是懵逼的,看着眼前一个字符串的题目愣是莫得思路,后来我接触到了KMP算法,然后……
然后就更懵逼了
一、这啥玩意?
KMP 算法,该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。
二、代码示例
int n[MAXN];
string t;
void getnext()
{
int j=0,k=-1;
n[0]=-1;
while(j<t.length-1)
{
if(k == -1 || t[j] == t[k])
{
j++;
k++;
next[j] = k;
}
else k = n[k];//这句是最让人懵逼的地方
}
}
简而言之,数组n的作用就是与字符串t的第i个字符相同的字符的下标为n[i],算法时间复杂度为O(m+n).
总结
暂时看不懂,理解不透,暂且记下这个模板。