(纪中)2194. censor【栈模拟】

(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) lengtht个字符是不是等于 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值