【复习】KMP

模板题链接

KMP思想

找到当前串满足 长度为k的前缀和后缀完全相同 的最大的k

精髓就在于next数组 next数组存的是上述的k

1     int i, k = 0;
2     next[0] = next[1] = 0;
3     for(i = 1; i < len2; i++){
4         while(k > 0 && s2[k] != s2[i])k = next[k];
5         if(s2[k] == s2[i]) k++;//考虑到k==0或第一次进入循环都需要这一次判定 
6         next[i + 1] = k;     
7     }  
自我匹配

与目标串匹配

 

1     k = 0;
2     for(i = 0; i < len1; i++){
3         while(k > 0 && s2[k] != s1[i])k = next[k];
4         if(s2[k] == s1[i]) k++;
5         if(k == len2) printf("%d\n", i - k + 2);
6     }
与目标串匹配

相关题目:

[NOI2014]动物园

猜你喜欢

转载自www.cnblogs.com/hjmmm/p/9185317.html
kmp
今日推荐