题目:
输入
第一行一个整数N,表示测试数据组数。
接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。
其中N<=20
输出
对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。
Sample Input
5
HA
HAHAHA
WQN
WQN
ADA
ADADADA
BABABB
BABABABABABABABABB
DAD
ADDAADAADDAAADAAD
Sample Output
3
1
3
1
0
Solution:
需要稍加改造KMP算法,因为有重叠的现象,所以需要将模式串的next数组往后再计算一位,比如ADA,首尾是一样的,那就计算ADAX,X所在next数,这样重叠现象也可解决。
#include<iostream>
#include<string>
using namespace std;
int * BuildNext(string pattern)
{
int n = pattern.size();

博客介绍了如何使用改进版的KMP算法处理字符串匹配,特别是在处理存在重叠情况的模式串时,通过计算模式串的next数组来解决。内容包括算法的应用、输入输出格式以及样例解释。
最低0.47元/天 解锁文章
3863

被折叠的 条评论
为什么被折叠?



