0
已解决
张岳恒
资深光能
资深光能
#include<iostream>
#include<string>
using namespace std;
int main(){
string a,b;
int s=0,c,w,k=0;
cin>>a>>b;
while(s!=-1){
bool flag=0;
s=a.find(b,0);
if(s!=-1){
for(int i=0;i<a.size();i++){
for(int j=0;j<b.size();j++){
if(a[i]==b[0])c=i;
else if(a[i]==b[b.size()-1]) w=i;
else if(a[i]==b[i]){
k++;
flag=1;
}
if(flag!=1){
k=0;
c=0;
w=0;
}
if(k==b.size()){
break;
}
}
if(k==b.size()){
break;
}
}
a.erase(c,w);
}
}
cout<<a;
return 0;
}
AC一个点,为啥TLE,有没有不用栈的方法?
张岳恒在2020-03-13 15:26:22追加了内容
Farmer John为他的奶牛们订阅了Good Hooveskeeping杂志,因此他们在谷仓等待挤奶期间,可以有足够的文章可供阅读。不幸的是,最新一期的文章包含一篇关于如何烹制完美牛排的不恰当的文章,FJ不愿让他的奶牛们看到这些内容。
FJ已经根据杂志的所有文字,创建了一个字符串 SS ( SS 的长度保证不超过 10^6106 ),他想删除其中的子串 TT ,他将删去 SS 中第一次出现的子串 TT ,然后不断重复这一过程,直到 SS 中不存在子串 TT 。
注意:每次删除一个子串后,可能会出现一个新的子串 TT (说白了就是删除之后,两端的字符串有可能会拼接出来一个新的子串 TT )。
输入格式:第一行是字符串 SS ,第二行输入字符串 TT ,保证 SS 的长度大于等于 TT 的长度, SS 和 TT 都只由小写字母组成。
输出格式:输出经过处理后的字符串,保证处理后的字符串不会为空串。
Translated by @StudyingFather
输入输出样例
输入 #1复制
whatthemomooofun moo
输出 #1复制
whatthefun
0
已采纳
何冯成
中级光能
中级光能
struct data{
int nxt[26],fail/*,last*/,end;
}a[1000005];
inline void Trie_build(){
scanf("%s",q);
int u=0,len=strlen(q);
for(int i=0;i<len;++i){
int p=q[i]-'a';
if(!a[u].nxt[p]) a[u].nxt[p]=++cnt;
u=a[u].nxt[p];
}a[u].end=len;
}
void AC_build(){
queue <int> h;
for(int i=0;i<26;++i) if(a[0].nxt[i]) h.push(a[0].nxt[i]);
while(!h.empty()){
int x=h.front(); h.pop();
for(int i=0;i<26;++i){
int &to=a[x].nxt[i];
if(to){
a[to].fail=a[a[x].fail].nxt[i];
//a[to].last= a[a[to].fail].end ? a[to].fail:a[a[to].fail].last;
h.push(to);
}else to=a[a[x].fail].nxt[i];
}
}
}
//---------以上裸AC自动机------------
void query(){
int u=0,len=strlen(g);
for(int i=0;i<len;++i){
u=a[u].nxt[g[i]-'a'];
stk1[++top]=u; //栈1存当前点在字典树中的位置
stk2[top]=i; //栈2存字符(答案)在主串中所在的位置
while(a[u].end) top-=a[u].end,u= top ? stk1[top]:0; //删除操作
}
for(int i=1;i<=top;++i) putchar(g[stk2[i]]);
putchar('\n'); //不换行就蜜汁爆炸(大雾)
}
不是整段代码
定义自己想
main 函数里的自己想
-------------------------------
望采纳
0
0
0
0
0