题目描述
农民约翰已经购买了订好Good Hooves keeping 杂志为他的奶牛,使他们有足够的材料看。不幸的是,最新一期载有关于如何煮完美的牛排的文章,而FJ 宁可他的奶牛没有看到一个相当不雅的文章(显然,这本杂志是需要更好的编辑监督的)。
FJ 已采取所有文字从该杂志在10^6 个字符来创建长度字符串s。从此,他想删除一个子串T( 100个字符)来审查不当内容。要做到这一点,农民约翰找到S 中的出现的T 并将其删除。然后,他再次重复这个过程,删除第一次出现的T,一直持续到没有更多出现T 的S. 注意,删除一次出现的可能会创建一个新出现的T 是以前不存在的。
请帮助审查完毕后,FJ 确定S 的最终内容。
输入
第一行将包含S
第二行包含T,T 的长度最多是S 的长度,S 和T 的所有字符位小写字母(范围a..z)
输出
全部删除完成后的S。保证使得S 在删除过程中不会成为空
样例输入
whatthemomooofun
moo
样例输出
whatthefun
TJ
这道题其实就是一个栈。每次压一个字符进去,再判断后length(t)个字符是不是等于t,是就弹栈。
BC
var
s,s1,t:ansistring;
i,j,l:longint;
c:array[1..1000000]of char;
p:boolean;
begin
assign(input,'censor.in');reset(input);
assign(output,'censor.out');rewrite(output);
readln(s1);
readln(t);
for i:=1 to length(s1) do
begin
inc(l);
c[l]:=s1[i];
if (c[l]=t[length(t)])and(l>=length(t)) then
begin
p:=true;
for j:=l-length(t)+1 to l do
if c[j]<>t[j-(l-length(t))] then
begin
p:=false;
break;
end;
if p then l:=l-length(t);
end;
end;
for i:=1 to l do s:=s+c[i];
writeln(s);
close(input);close(output);
end.