82分TLE 求助
查看原帖
82分TLE 求助
553640
Konjac0629楼主2023/8/24 17:13

RT,大佬们看看如何优化,最好还是使用vector

记录

#include <bits/stdc++.h>

using namespace std;

vector<int> prefix_function(string s)
{
    int n = (int)s.length();
    vector<int> pi(n);
    for (int i = 1; i < n; i++)
    {
        int j = pi[i - 1];
        while (j > 0 && s[i] != s[j])
            j = pi[j - 1];
        if (s[i] == s[j])
            j++;
        pi[i] = j;
    }
    return pi;
}

int find_first_occurrence(string text, string pattern)
{
    string cur = pattern + '#' + text;
    int sz1 = text.size(), sz2 = pattern.size();
    int v=-1;
    vector<int> lps = prefix_function(cur);
    for (int i = sz2 + 1; i <= sz1 + sz2; i++)
    {
        if (lps[i] == sz2){
            v=i - 2 * sz2;
            break;
        }
    }
    return v;
}

int main(){
    string S,T;
    cin >> S >> T;
    int firstPos=find_first_occurrence(S,T);
    while(firstPos!=-1){
        S.erase(firstPos,T.length());
        firstPos=find_first_occurrence(S,T);
    }
    cout << S << endl;
    return 0;
}
2023/8/24 17:13
加载中...