94分 WA#5求调
查看原帖
94分 WA#5求调
1134682
lxer66楼主2024/9/27 16:39

不知道为什么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");
}

2024/9/27 16:39
加载中...