(File IO): input:censor.in output:censor.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
农民约翰已经为他的奶牛订好了
G
o
o
d
H
o
o
v
e
s
k
e
e
p
i
n
g
Good Hooves keeping
GoodHooveskeeping 杂志,使他们有足够的材料看。不幸的是,最新的一期载有关于如何煮完美的牛排的文章,而
F
J
FJ
FJ不想他的奶牛看到这篇相当不雅的文章(显然,这本杂志是需要更好的编辑监督的)。
F
J
FJ
FJ 从该杂志采取了所有文字,创建了长度小于等于
1
0
6
10^6
106 的字符串
s
s
s。从此,他想删除一个子串
T
T
T来审查不当内容。要做到这一点,农民约翰找到
S
S
S 中出现的
T
T
T 并将其删除。然后,他再次重复这个过程,删除出现的
T
T
T,一直持续到没有出现
T
T
T的
S
S
S。注意,删除一次后可能会创建一个新的
T
T
T出现,这个T是以前不存在的。
请输出审查完毕后,
F
J
FJ
FJ 所确定 的
S
S
S的最终内容。
输入
第一行将包含
S
S
S
第二行包含
T
T
T,
T
T
T 的长度最多是
S
S
S 的长度,
S
S
S 和
T
T
T 的所有字符均为小写字母(范围
a
.
.
z
a..z
a..z)
输出
全部删除完成后的
S
S
S。保证使得
S
S
S 在删除过程中不会成为空。
样例输入
whatthemomooofun
moo
样例输出
whatthefun
数据范围限制
解题思路
这道题其实就是一个栈。每次压一个字符进去,再判断后
l
e
n
g
t
h
(
t
)
length(t)
length(t)个字符是不是等于
t
t
t,是就弹栈。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
string s,t,s1;
int l,len;
bool p;
char c[1000000];
int main(){
freopen("censor.in","r",stdin);
freopen("censor.out","w",stdout);
cin>>s;
cin>>t;
l=-1;
len=s.size();
for(int i=0;i<len;i++)
{
l++;
if((s[l]==t[t.size()-1])&&(l>=t.size()-1))
{
p=1;
for(int j=l-t.size()+1;j<=l;j++)
{
if(s[j]!=t[j-(l-t.size()+1)])
{
p=0;
break;
}
}
if(p)
{
s.erase(l-t.size()+1,t.size());
l=l-t.size();
}
}
}
//for(int i=0;i<=l;i++)
// s1=s1+c[i];
cout<<s;
}