求助p4824,82分,#4#5#8WA
查看原帖
求助p4824,82分,#4#5#8WA
678087
fangzichang楼主2022/5/15 13:34
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
stack<int> m;
string s1,s2;
int a[N],b[N],ans,st[N],top;
int main(){
	cin>>s1>>s2;
	for(int i=1,len=s2.size(),j=0;i<len;i++)
	{
		while(j>0&&s2[i]!=s2[j]) j=a[j-1];
		if(s2[i]==s2[j]) j++;
		a[i]=j;
	}
	for(int i=0,len=s1.size(),j=0;i<len;i++)
	{
		
		while(j>0&&s1[i]!=s2[j]) j=a[j-1];
		if(s2[j]==s1[i]) j++;
		b[i]=j;
		st[top++]=i;
		if(j==s2.size()){
			top-=s2.size();
			j=b[st[top]-1];
		}
	}
	for(int i=0;i<top;i++) cout<<s1[st[i]];
	puts("");
	return 0;
}

因为习惯用string,所以从0开始计数了,希望不要介意()

没有TLE的问题,能不能帮忙看看思路上哪里错掉了

2022/5/15 13:34
加载中...