kmp中next和nextval的区别

模式匹配。

kmp中next数组表示如果当前匹配不成功,匹配串移动到的位置,不考虑移动到的位置的数与当前位置数的关系。

kmp中nextval数组表示如果当前匹配不成功,匹配串移动到的位置,考虑移动到的位置的数与当前位置数的关系。

求next

    while(i<len)
    {
        if(j==-1||str[i]==str[j])
        {
            i++;j++;
            next[i]=j;
        }
        else j=next[j];
    }

求nextval

while(i<len)
    {
        if(j==-1||str[i]==str[j])
        {
            i++;j++;
            if(str[i]!=str[j])next[i]=j;
            else next[i]=next[j];
        }
        else j=next[j];
    }

本质上是相同的,不同的地方在于nextval刨根问底,利用类似与并查集的思想,寻找到如果str[i]==str[j],匹配串应该移动的位置

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/rowanhaoa/article/details/19070671
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞