11和13wa 真心求助,调了一下午了
查看原帖
11和13wa 真心求助,调了一下午了
1125710
Keria04楼主2024/3/10 21:50
#include <iostream>
#include <string>
#define MAXN 1100100
using namespace std;
void get_next(string p,int* next)
{
    next[0]=0;
    for(int i=1,m=0;i<p.length();i++)
    {
        
        while(m>0&&p[i]!=p[m])
        {
            m=next[m-1];
        }
        if(p[i]==p[m])
        {
        m++;
        }
        next[i]=m;
        
    }
}
int kmp(string s,string p,int* next)
{
    int i,j;
    get_next(p,next);
    for(i=0,j=0;i<s.size();i++)
    {
        while(j>0&&s[i]!=p[j])
        {
            j=next[j-1];
        }
        if(s[i]==p[j])
        {
            j++;
        }
        if(j==p.size())
        {
            cout<<i-j+2<<endl;
            i=i-j+2;
            j=next[j-1];
        }
    }
    return -1;
}
int main()
{
    int next[MAXN];
    string s1,s2;
    cin>>s1;
    cin>>s2;
    while(kmp(s1, s2,next)!=-1);
    for(int i=0;i<s2.size();i++)
    {
        cout<<next[i]<<" ";
    }
    
}

2024/3/10 21:50
加载中...