经典KMP算法判断

经典KMP算法判断,第1张

经典KMP算法判断

#include
#include
using namespace std;
const int M=1e6+10;
void Getnext(string t,int next[])
{
    int i=0,j=-1;
    next[0]=-1;
    int len=t.size();
    while(i     {
        if(j==-1||t[i]==t[j])
        {
            next[++i]=++j;
            if(t[i]==t[j])
                next[i]=next[j];
        }
        else
            j=next[j];
    }
}
bool index_KMP(string s,string t,int next[])
{
    int i=0,j=0;
    int len1=s.size(),len2=t.size();
    while(i     {
        if(j==-1||s[i]==t[j])
        {
            i++;j++;
        }
        else
        {
            j=next[j];
        }
    }
    if(j>=len2)
        return true;
    else
        return false;
}
int main()
{
    string s,t;
    int i;
    while(cin>>s)
    {
        int next[M+50]= {0};
        cin>>t;
        Getnext(t,next);
        int flag=index_KMP(s,t,next);
        if(flag==0)
            cout<<"NO"<         else
            cout<<"YES"<     }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5594736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存