天啊,帮帮忙
查看原帖
天啊,帮帮忙
1353550
Jimmy0313楼主2025/1/16 19:27
#include<bits/stdc++.h>
//unsigned
using namespace std;
string zh,z;
int next1[1123456]={0,0,1};
void ne(){
	for(int i=0,j=0;j<z.size();j++){
		if(i==j){
			next1[j]=0;
		}else if(z[i]==z[j]){
			next1[j]=++i;
		}else{
			while(z[i]!=z[j]&&i!=0){
				i=next1[i-1];
			}
			if(z[i]==z[j]&&i+1!=j){
				i++;
			}
			next1[j]=i;
		}
	}
}
void kmp(){
	int j=0,i=0;
	for(j=0,i=0;i<zh.size();i++){
//		cout<<i<<" "<<j<<" ";
		if(j==z.size()){
			cout<<abs(i-j)+1<<"\n";
			j=next1[j-1	]+1;
//			i--;
//			continue;
		}else if(zh[i]!=z[j]){
			if(j!=0) {
				j=next1[j-1];
				i--;
			}
		}else j++;
//		cout<<"\n";
	}
	if(j==z.size()){
		cout<<abs(i-j)+1<<"\n";
//			i--;
//			continue;
	}
	
}
int main(){
	cin>>zh>>z;
	ne();
	kmp();
	for(int i=0;i<z.size();i++){
		cout<<next1[i]<<" ";
	} 
}
2025/1/16 19:27
加载中...