【P4824 [USACO15FEB]Censoring S】题解
本文搬运自本人初中博客园博客,若图片加载不出来,可到原文查看:https://www.cnblogs.com/zhangtingxi/p/15812544.html
题目
Farmer John为他的奶牛们订阅了Good Hooveskeeping杂志,因此他们在谷仓等待挤奶期间,可以有足够的文章可供阅读。不幸的是,最新一期的文章包含一篇关于如何烹制完美牛排的不恰当的文章,FJ不愿让他的奶牛们看到这些内容。
FJ已经根据杂志的所有文字,创建了一个字符串 ( 的长度保证不超过 ),他想删除其中的子串 ,他将删去 中第一次出现的子串 ,然后不断重复这一过程,直到 中不存在子串 。
注意:每次删除一个子串后,可能会出现一个新的子串 (说白了就是删除之后,两端的字符串有可能会拼接出来一个新的子串 )。
输入格式:第一行是字符串 ,第二行输入字符串 ,保证 的长度大于等于 的长度, 和 都只由小写字母组成。
输出格式:输出经过处理后的字符串,保证处理后的字符串不会为空串。
思路
KMP+栈
先对 串作KMP,然后在和 串的匹配过程中,当能够完全匹配成功,就把匹配成功的地方删掉,继续匹配。
这个过程可以用栈辅助实现。
总结
总得来说,这题还是不错的。
首先想到用KMP,这很明显,可是删除后怎么匹配呢?
利用栈辅助实现就是这道题的一个精粹。对于KMP类问题如果出现删除的情况,可以尝试使用栈实现。
Code
1 | // Problem: P4824 [USACO15FEB]Censoring S |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 zhangxixi的博客!





