【字符串】【kmp模板】

s1为匹配串,s2为模式串。kmp算法中的next数组称为失配指针,表示s1[i]和s2[j]匹配失败时,最有效率的方法是让s1[i]和s2[j]中的哪个元素进行匹配。
next数组有很多种定义方式,自己选了1种作为模板。

void get_NEXT()//建立next数组 
{
    int j,k;
    NEXT[0] = k = -1;
    j = 0;
    while(s2[j]!='')
    {
        if(k==-1||s2[k] == s2[j])
            NEXT[++j] = ++k;
        else
            while(k!=-1)
                k = NEXT[k];
    }
    return;
}
int kmp()//字符串匹配函数 
{
    int i,j;
    i = j = 0;
    while(s1[i]!='')
    {
        if(j != -1&&s2[j]=='')
            j = NEXT[j];
        else
        {
            while(j!=-1&&s2[j]!=s1[i])
                j = NEXT[j];
            j++;
            i++;
        }
    }
    return j;
}
 
原文地址:https://www.cnblogs.com/hellocheng/p/7350067.html