KMP
求 匹配串(s2) 在 模式串(s1) 中出现的次数或者位置
首先求出模式串的(next)数组,表示以(i)结尾的子串可以匹配到的最大前缀长度。
Next[0] = -1;
for(int i = 1,j; i <= len2; i++)
{
for(j = Next[i-1]; j >= 0 && s2[j+1] != s2[i]; j = Next[j]);
Next[i] = j+1;
}
匹配过程:移动模式串
for(int i = 1,j = 0; i <= len1; i++)
{
for(;s1[i] != s2[j+1] && j >= 0; j = Next[j]);
j++;
if(j == len2) ans++; //匹配成功
}