求助,为什么测试12,13过不了?
查看原帖
求助,为什么测试12,13过不了?
813364
maplelearc楼主2023/3/29 21:20
#include<bits/stdc++.h>
using namespace std;

const int MAX=1110000;
int Next[MAX];

string s1,s2;
void getNext(string s)
{
	Next[0]=Next[1]=0;
	for(int i=1; i<s.length(); i++)
	{
		int j=Next[i];
		while(j&&s[i]!=s[j]) j=Next[j];
		Next[i+1]=s[i]==s[j]?j+1:0;
	}
}
void kmp(string s1,string s2)
{
	int j=0;
	for(int i=0; i<s1.length(); i++)
	{
		while(j&&s2[j]!=s1[i]) j=Next[j];
		if(s2[j]=s1[i]) j++;
		if(j==s2.length())
		{
			cout<<i-s2.length()+2<<endl;
			j=Next[j];
		}
	}

}
int main()
{
	cin>>s1>>s2;
	getNext(s2);
	kmp(s1,s2);
	for(int i=1; i<=s2.length(); i++)
	{
		cout<<Next[i]<<" ";
	}
	return 0;
}
2023/3/29 21:20
加载中...