帮我看看
查看原帖
帮我看看
865056
Be_myself楼主2023/5/27 20:16
#include<iostream>
#include<string>
using namespace std;
void getnext(string s2,int *next)
{
    int length=s2.length();
    int i=0,j=-1;
    next[0]=-1;
    while(i<length)
    {
        if(j==-1||s2[i]==s2[j])
        {
            i++;
            j++;
            next[i]=j;
        }
        else
        {
            j=next[j];
        }
        
    }
}
int Kmp(string s1,string s2,int *next)
{
	int i=0,j=0;
    while(i<s1.length()&&j<=s2.length())
    {
        if(next[j]==-1||s1[i]==s2[j])
        {
            j++;
            i++;
        }
        else j=next[j];
        if(j==s2.length())
        {
        	cout<<i-s2.length()+1<<endl;
		}
    }
	return 0;
}
int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    int next[s2.length()];
    getnext(s2,next);
    Kmp(s1,s2,next);
    for(int i=1;i<s2.length()+1;i++)
    {
        cout<<next[i]<<" ";
    }
}
2023/5/27 20:16
加载中...