hihocode1015-KMP 算法探讨
题目如下
输入
第一行一个整数N,表示测试数据组数。接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。其中N<=20
输出
对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。
样例输入
5
HA
HAHAHA
WQN
WQN
ADA
ADADADA
BABABB
BABABABABABABABABB
DAD
ADDAADAADDAAADAAD
样例输出
3
1
3
1
0
算法解释
KMP引出
源 串:babababababababb
模式串:bababb
请问原串中有几个这样的模式串?
一目了然,只有一个,但如果用计算机程序去判别的话,用一个一个去匹配的方法十分浪费时间。
源 串:babab|abababababb
模式串:babab|b
发现在第6 个字符处有了分歧和误差,此时有两种情况
第一,源串和模式串的新的对齐点在此字符之后(包括此字符);
第二,源串的这字符正好和模式串的某个字符匹配对齐;
在这里我们讨论第二种情况
源串: babab