几乎全WA,跳过有奖励
查看原帖
几乎全WA,跳过有奖励
852827
Mr_yeh楼主2024/12/7 16:03
#include<bits/stdc++.h>
using namespace std;
string s,t;
int n,m;
int Ne[1000010];
void get_Next(){
	int j=0;
	Ne[0]=0;
	for(int i=1;i<m;i++){
		while(j>0&&s[i]!=s[j]) j=Ne[j-1];
		if(s[i]==s[j]) j++;
		Ne[i]=j;
	}
}
void str(){
	get_Next();
	int j=0;
	for(int i=0;i<n;i++){
		while(j>0&&s[i]!=t[j]) j=Ne[j-1];
		if(s[i]==t[j]) j++;
		if(j==m){
			printf("%d\n",i-m+2);
			j=Ne[j-1];
		}
	}
}
int main(){
	cin>>s>>t;
	n=(int)s.size();
	m=(int)t.size();
	str();
	for(int i=0;i<m;i++) printf("%d ",Ne[i]);
	return 0;
}
2024/12/7 16:03
加载中...