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;
}