关键:nxt数组
-
定义:nxt[i]存储目标数组的前i - 1项的最长相同前后缀的长度;
-
作用:当匹配过程中,遇到不相同/后找到目标字符串时,则将 j(指向目标数组的指针)= nxt[j],继续匹配
-
nxt数组的代码演示:
int nxt[100010];//全局变量
nxt[0] = nxt[1] = 0;//前两位的最长相同前后缀的长度为0
for (int i = 1,j = 0; i < s2.size(); i++) {//j是前缀最后的位置, i是后缀最后的位置
while (j && s2[i] != s2[j]) j = nxt[j];//找到最长的前后缀重叠长度
nxt[i + 1] = (s2[i] == s2[j] ? ++j : 0);//不相等的情况,即无前缀能与后缀重叠,直接赋值为0;
}
-
优点:指向被查找数组的指针i,从头遍历到尾(不反复),指向目标数组的指针j,通过nxt数组,当匹配过程中,遇到不相同/后找到目标字符串时,跳到合适的位置;