给定一个字符串S,给定一个模式串/n个模式串,从前往后寻找,一旦找到模式串,删除该模式串并继续从头寻找。重复这一过程,直到S中不存在模式串,输出最后的S。
好了这是Usaco月赛里面题意和做法都非常相似的两个题,分别是KMP和AC自动机的应用。
Sliver
BZOJ3942 - [Usaco2015 Feb]Censoring
题意
给出两个字符串 $S$ 和 $T$,每次从前往后找到$S$ 的一个子串 $A=T$并将其删除,空缺位依次向前补齐,重复上述操作多次,直到串$S$中不含 $T$串。输出最终的$S$串。
思路
用栈维护给定的$S$串,对$s$依次入栈并求当前位的$next$数组,如果匹配到$T$,将长度为$len(T)$的字符出栈。对于每个入栈元素,取当前栈顶元素即可求出当前元素的$next$数组指向位置,直到$S$全部入栈。输出栈内元素即为答案。
代码
1 |
|
Gold
BZOJ3940 - [Usaco2015 Feb]Censoring
题意
给定一个串$S$和$n$个屏蔽词$T_n$,对于串$S$,每次从前往后检查并删除最先出现的屏蔽词,重复该操作直到$S$中没有列表内的单词为止。完成这些操作并输出最后的$S$。
思路
同样由栈维护母串$S$,并记录栈中每个字符在Trie树上的位置,如果遇到关键串,将该串推出栈中,每次入栈前取当前栈顶字符在Trie树上的位置即可求出当前串的位置。
代码
1 |
|