求在主串中模式串重复出现的次数 ← KMP算法(重叠计算)

news/2024/10/25 13:17:22/

【题目描述】
求在主串中模式串重复出现的次数。
题目引申自:https://blog.csdn.net/hnjzsyjyj/article/details/134238575

【输入格式】
第一行输入组数T;
接下来T行数据,其中每行的第一个数据表示模式串(长度≤1000),第二个数据表示主串,用空格隔开。

【输出格式】
输出一个整数,表示在主串中模式串重复出现的次数。

【输入样例】
2
AZAZAZA
AZA
ttYkYtYYk
tY

【输出样例】
3
2

【算法分析】
在本文 KMP 函数的定义中,只需在 if(j==lent) 时,修改 j 的值,便可实现由不重叠(j=0)计算至重叠(j=ne[j])计算模式串在主串中出现的次数。 

题目“HDU 2087:剪花布条”,不重叠计算模式串在主串中出现的次数。(if(j==lent), j=0
题目“
HDU 1686:Oulipo”,重叠
计算模式串在主串中出现的次数。(if(j==lent), j=ne[j]

【算法代码】

#include<bits/stdc++.h>
using namespace std;const int maxn=1e3+5;
int ne[maxn];void getNext(string t) {int len=t.length();int i=0, j=-1;ne[0]=-1;while(i<len) {if(j==-1 || t[i]==t[j]) {i++;j++;ne[i]=j;} else j=ne[j];}
}int KMP(string S,string T) {int lens=S.length();int lent=T.length();int i=0;int j=0;int cnt=0;while(i<lens && j<lent) {if(j==-1 || S[i]==T[j]) {i++;j++;} else j=ne[j];if(j==lent) {cnt++;j=ne[j]; //j=0;}}return cnt;
}int main() {int T;cin>>T;while(T--) {string s,t;cin>>s>>t;getNext(t);cout<<KMP(s,t)<<endl;}return 0;
}/*
input:
2
AZAZAZA
AZA
ttYkYtYYk
tYoutput:
3
2
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/127112363
https://blog.csdn.net/hnjzsyjyj/article/details/127140892
https://blog.csdn.net/hnjzsyjyj/article/details/127112363
https://blog.csdn.net/hnjzsyjyj/article/details/134238575


 


http://www.ppmy.cn/news/1200013.html

相关文章

Linux生成静态库

GCC 什么是GCC GCC 是 GNU 编译器集合&#xff08;GNU Compiler Collection&#xff09;的缩写。它是一个开源的编程语言编译器&#xff0c;支持多种编程语言&#xff0c;包括 C、C、Objective-C、Fortran、Ada 和 Go 等。GCC 最初由理查德斯托曼&#xff08;Richard Stallman…

187.重复的 DNA 序列

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;187. 重复的DNA序列 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用两个哈希表&#xff0c;一个存放已遍历过的长度为 10 的字符串&#xff0c;另一个存放重复的长度为 10 的字符串。顺…

stable diffusion安装踩坑之clip安装、git报错

clip本地安装环境链接问题 本节主要记录一下在windows安装stable diffusion时&#xff0c;clip脚本安装不上&#xff0c;本地安装时如何链接到当前库的问题 首先&#xff0c;在脚本安装clip不成功时&#xff0c;脚本会输出一个commend指令&#xff0c;复制到浏览器就可以很快…

pg_upgrade from 9.6升级到14.5

pg_upgrade — 升级PostgreSQL服务器实例 大纲 pg_upgrade -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir [option...] 描述 pg_upgrade&#xff08;之前被称为pg_migrator&#xff09; 允许存储在PostgreSQL数据文件中的数据被升级到一个较晚 的PostgreSQL主…

Unity地面交互效果——3、曲面细分基础知识

大家好&#xff0c;我是阿赵。   之前介绍了使用动态法线贴图混合的方式模拟轨迹的凹凸感&#xff0c;这次来讲一下更真实的凹凸感制作。不过在说这个内容之前&#xff0c;这一篇先要介绍一下曲面细分着色器(Tessellation Shader)的用法。 一、为什么要做曲面细分 之前通过法…

应用软件安全编程--06预防 XML 外部实体攻击

XML文档可以从一个很小的逻辑块(实体)开始动态构建。实体可以是内部的、外部的或者基于参数的。外部实体运行是将外部文件中的 XML 包含进来。攻击者可以通过操作实例的 URI, 使其指向特定的在当前文件系统中保存的文件&#xff0c;从而造成拒绝服务或程序崩溃&#xff0c;比如…

发送Http请求的HttpClientUtil工具

发送Http请求的HttpClientUtil工具 代码如下&#xff1a; /*** author xuan* create 2023/11/6*/ public class HttpUtil {// 创建连接池管理器private static final PoolingHttpClientConnectionManager connMgr new PoolingHttpClientConnectionManager();// http客户端pr…

1.4、Python基础-闭包、装饰器、语法糖、反射

1.3、Python基础 1、闭包2、装饰器-语法糖写法3、Python中的反射 1、闭包 闭包就是外部函数中定义一个内部函数&#xff0c;内部函数引用外部函数中的变量&#xff0c;外部函数的返回值是内部函数 def Student():name "susu"age 21print(f"{name}{age}了&qu…