字符串--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++;                //匹配成功
}
posted @ 2020-01-15 13:06  hezongdnf  阅读(91)  评论(0编辑  收藏  举报