KMP

用于做类似:给定A,B两个字符串,在主串A中查找B是否出现,出现次数,出现位置。类似的题

inline int work()
{
    int ans=0;
    int j=0;
    for(int i=0;i<la;i++)
    {
        while(j>0&&a[i+1]!=b[j+1])//不匹配
        j=kmp[j];
        if(b[j+1]==a[i+1])//匹配
        j++;
        if(j==lb)//发现包含B串,并重新匹配
        {
            wei[++ans]=i;
            j=0;
        }
    }
    return ans;
}

 

求kmp数组(相当于B串自我匹配的过程---沃兹吉梭德

inline void kp()
{
    memset(kmp,0,sizeof(kmp));
    kmp[1]=0;
    int j=0;
    for(int i=1;i<la;i++)
    {
        while(j>0&&a[i+1]!=a[j+1])
        j=kmp[j];
        if(a[j+1]==a[i+1])
        j++;
        kmp[i+1]=j;
    }
}

恩,没了

posted @ 2018-10-16 15:56  Tarjan_fjz  阅读(73)  评论(0编辑  收藏  举报