字符串匹配

来源:互联网 发布:可以借钱的软件 编辑:程序博客网 时间:2024/06/05 05:50
字符串匹配
题目描述:
给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。
给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。
N,M,K<=200000

输入描述:
第一行三个数 N,M,K,表示A的长度、B的长度和询问数。
第二行为串A。
第三行为串B。
接下来K行,每行1个数X。

输出描述:
对于每个询问输出一个数。

样例输入:
6 2 2
aabcde
ab
0
2

样例输出:
4
1

题解:
好吧又是一道思路题,但是挺有意思,值得思考思考。
阅读题目后,我们发现,与kmp的匹配不同,此题是询问以某一字符为开头的最长匹配长度(n^2查找?不T我咬死你)
思考一下每一个字符对答案的贡献。
我们发现当前匹配的长度,是对当前字符的失配做出1的贡献的(例如:abcdab,后面的b的失配为1,是对匹配到他的前一个字符‘a’时对匹配长度为1做的贡献)那么我们就每次统计匹配的长度,加到cnt[i]里就行了。
但是这仍不是最终的答案,因为每一个答案是由前一个答案推过来的,所以后面的答案一定包含前一个答案,容斥一下输出即可。

代码:
字符串匹配.md


原创粉丝点击