字符串--KMP

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++;                //匹配成功
}
原文地址:https://www.cnblogs.com/hezongdnf/p/12196459.html