#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的问题,能不能帮忙看看思路上哪里错掉了