不知道为什么WA#5
和别人用栈不太一样,我在kmp的基础上加了一个rnext记录到字符串s的这个位置和t字符串匹配的长度,但是不知道为什么错了
#include <bits/stdc++.h>
#define maxn 1000005
typedef long long ll;
#define int ll
#define INF 0x3f3f3f3f3f3f3f3fLL
using namespace std;
int Next[maxn];
int rnext[maxn];
void getnext(string s){
int len=s.size();
Next[0]=0;
int j=0;
for(int i=1;i<len;i++){
while(j>0&&s[i]!=s[j])j=Next[j-1];
if(s[i]==s[j])j++;
Next[i]=j;
}
}
void kmp(string s1,string s2){
int j=0;
for(int i=0;i<s1.size();i++){
while(j>0&&s1[i]!=s2[j]){
rnext[i]=0;
j=Next[j-1];
}
if(s1[i]==s2[j]){j++;rnext[i]=j;}
if(j==s2.size()){
s1.erase(i+1-s2.size(),s2.size());
i=i-s2.size();
j=rnext[i];
}
}
cout<<s1<<endl;
}
void solve() {
string s,t;
cin>>s;
cin>>t;
getnext(t);
kmp(s,t);
}
signed main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while (T--) {
solve();
}
system("pause");
}