KMP模板

╄→尐↘猪︶ㄣ 提交于 2019-11-29 14:23:58

const int N=1e6+10; //文本串的长度 
const int M=1e4+10; //模式串的长度 
char a[N]; //文本串 
char b[M]; //模式串 
int next0[M]; 
void find_next()
{
    int len=strlen(b);
    int k=-1;
    next0[0]=-1;
    int j=0;
    while(j<len)
    {
        if(k==-1||b[j]==b[k])
        {
            j++;
            k++;
            next0[j]=k;
        }
        else
        {
            k=next0[k];
        }
    }
}


int kmp()
{
    int i=0;
    int j=0;
    int alen=strlen(a);
    int blen=strlen(b);
    while(i<alen&&j<blen)
    {
        if(j==-1||a[i]==b[j])
        {
            i++;
            j++;
        }
        else j=next0[j];
    }
    if(j==blen) return i-j+1; //返回查找到所在的位置 
    return -1; //查找失败 
}
 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!