字符串匹配算法

来源:互联网 发布:win10网络图标有个红叉 编辑:程序博客网 时间:2024/04/25 17:24
朴素的字符串匹配算法需要n*m的时间复杂度。
KMP算法能够很好的解决字符串匹配问题。
int fail[n];//////失败函数

void compute-fail()//s2为子字符串
{
    fail[0]=-1;
    k=-1;
    for(i=1;i<n;i++)
    {
        while(k>-1&&s2[i]!=s2[k+1])k=fail[k];
        if(s2[k+1]==s2[i])k=k+1;
        fail[i]=k;
    }
}

bool Kmp(string s1,string s2)//s1的长度为m,s2的长度为n
{
    int i=0,j=0;
    while(i<m&&j<n)
    {
        if(s1[i]==s2[j]){i++;j++;}
        else
        {
            if(j==0)i++;
            else j=fail[j-1]+1;
        }
    }
   
    if(j>=n)return true;
    else return false;
}
原创粉丝点击