64分求助
查看原帖
64分求助
1112791
yi_zhi_fei_chai楼主2024/6/16 18:22
#include<bits/stdc++.h>
#define MAXN 10000086
using namespace std;
int sj[MAXN],Next[MAXN];
char s[MAXN],p[MAXN],ans[MAXN];
string ss,tt;
int zh[MAXN],top;
void thenext(char *p,int plen){
	Next[0]=0;
	Next[1]=0;
	for(int i=1;i<plen;i++){
		int j=Next[i];
		while(j&&p[i]!=p[j])j=Next[j];
		if(p[i]==p[j])Next[i+1]=j+1;
		else Next[i+1]=0;
	}
}
void kmp(char *s,char *p){
	int slen=strlen(s),plen=strlen(p);
	thenext(p,plen);
	int j=0;
	for(int i=0;i<slen;i++){
		while(j&&s[i]!=p[j])j=Next[j];
		if(s[i]==p[j])j++;
		zh[++top]=i;
		ss[i]=j;
		if(j==plen){
			top-=plen;
			j=ss[zh[top]];
		}
	}
}
int main(){
	cin>>ss;
	cin>>tt;
	for(int i=0;i<ss.length();i++)s[i]=ss[i];
	for(int i=0;i<tt.length();i++)p[i]=tt[i];
	kmp(s,p);
	for(int i=1;i<=top;i++)
		printf("%c",s[zh[i]]);
	return 0;
}
2024/6/16 18:22
加载中...