70分求调
查看原帖
70分求调
754095
starNameHXH楼主2023/11/8 19:03
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int nextD[N];
int main(){
	string sear, fins;
	cin>>sear>>fins;
	int sear_p=0,fins_p=0;
	int ok_len=0,now_p=1;
	while(now_p<int(fins.size())){
		if(fins[now_p]==fins[ok_len]){
			nextD[now_p++]=++ok_len;
		}else if(ok_len){
			ok_len=nextD[ok_len-1];
		}else{
			nextD[now_p++]=0;
		}
	}
	while(sear_p<int(sear.size())){
		if(sear[sear_p]==fins[fins_p]){
			sear_p++;
			fins_p++;
		}else if(fins_p){
			fins_p=nextD[fins_p-1];
		}else{
			sear_p++;
		}
		
		if(fins_p==int(fins.size())){
			cout<<sear_p-fins_p+1<<endl;
			fins_p=0;
		}
	}
	for(int i=0;i<int(fins.size());i++){
		cout<<nextD[i]<<' ';
	}
	return 0;
}

以上代码只有70分,如有知晓解法者请指出,谢谢!

2023/11/8 19:03
加载中...