四十分求助
查看原帖
四十分求助
1318655
ALingyyds楼主2024/11/19 17:24
#include<iostream>
#include<cstring>
using namespace std;
char s[1000010];
char t[1000010];
int kmp[1000010];
int kmps[1000010]; 
char ss[1000010];
int main(){
	scanf("%s",s+1);
	scanf("%s",t+1);
	int ls=strlen(s+1);
	int lt=strlen(t+1);
	kmp[1]=0;
	int i,j=0;
	for(i=2;i<=lt;i++){
		while(j&&t[i]!=t[j+1])
			j=kmp[j];
		if(t[i]==t[j+1])
			j++;
		kmp[i]=j;
	}
	int top=1;
	j=0;
	
	for(i=1;i<=ls;i++){
		while(j&&s[i]!=t[j+1])
			j=kmp[j];
		if(s[i]==t[j+1])
			j++;
		kmps[i]=j;
		ss[top++]=s[i];
		if(j==lt){
			top-=lt;
			j=kmps[top-1];//似乎错在这一行代码
		}
	}
	ss[top]='\0';
	cout<<ss+1;
	return 0;
} 
2024/11/19 17:24
加载中...