二、数据结构7:KMP 模板题+算法模板(KMP字符串)

news/2024/10/17 12:37:26/

文章目录

  • 算法模板
    • KMP题目模板
  • 模板题
    • KMP字符串
      • 原题链接
      • 题目
      • 思路
      • 题解

算法模板

KMP题目模板

// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度
求模式串的Next数组:
for (int i = 2, j = 0; i <= m; i ++ )
{while (j && p[i] != p[j + 1]) j = ne[j];if (p[i] == p[j + 1]) j ++ ;ne[i] = j;
}// 匹配
for (int i = 1, j = 0; i <= n; i ++ )
{while (j && s[i] != p[j + 1]) j = ne[j];if (s[i] == p[j + 1]) j ++ ;if (j == m){j = ne[j];// 匹配成功后的逻辑}
}

模板题

KMP字符串

原题链接

https://www.acwing.com/problem/content/833/

题目

831 . KMP字符串
给定一个字符串 S
,以及一个模式串 P
,所有字符串中只包含大小写英文字母以及阿拉伯数字。

模式串 P
在字符串 S
中多次作为子串出现。

求出模式串 P
在字符串 S
中所有出现的位置的起始下标。

输入格式
第一行输入整数 N
,表示字符串 P
的长度。

第二行输入字符串 P

第三行输入整数 M
,表示字符串 S
的长度。

第四行输入字符串 S

输出格式
共一行,输出所有出现位置的起始下标(下标从 0
开始计数),整数之间用空格隔开。

数据范围
1≤N≤105

1≤M≤106
输入样例:

3
aba
5
ababa

输出样例:

0 2

思路

视频讲解:https://www.acwing.com/video/259/

在这里插入图片描述
关于next数组:
在这里插入图片描述
“前缀串=后缀串”
在这里插入图片描述

题解

#include <iostream>
using namespace std;const int N = 1e5 + 10;
const int M = 1e6 + 10;int n,m;
char p[N],s[M];
int ne[N];int main(){cin>>n>>p+1>>m>>s+1;
//	p为字符数组,cin>>p+1表示字符数组从第二位开始输入! 即把p[0]空出来,从p[1]开始输入 //	求next数组 for(int i=2,j=0;i<=n;i++){while(j && p[i] != p[j+1]) j = ne[j]; // 在模板串内找前缀串与后缀串相同的位置 if(p[i] == p[j+1]) j++;ne[i] = j;}//	KMP匹配: for(int i=1,j=0;i<=m;i++){while(j && s[i] != p[j+1]) j = ne[j];if(s[i] == p[j+1]) j++;if(j == n){printf("%d ",i-n);j = ne[j];}}return 0; 
}

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

相关文章

acwing 1064 小国王 线性状态压缩DP

输入 3 2输出 16&#x1f37a; AC code #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector>using namespace std;typedef long long ll; const int N 12; const int M 1 << 10, K 110;//…

【外卖系统】菜品信息分页查询

需求分析 当菜品数据很多时&#xff0c;用分页的形式来展示列表数据 代码开发 页面发送ajax请求&#xff0c;将分页查询参数提交到服务端&#xff0c;获取分页数据页面发送请求&#xff0c;请求服务端进行图片下载&#xff0c;用于页面图片展示 构造分页 注意&#xff1a;…

2023年7月CSDN客服月报|解决3个重大问题和25个次要问题,处理4个用户需求及建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉报告》第22期&#xff0c;接下来就请大家一同回顾我们7月份解决的bug&#xff5e; 一、重大问题 1、【小程序】会员小程序签到余额及转盘余额未到账 反馈量&#xff1a;14 问题描述…

opencv04-掩膜

opencv04-掩膜 抠图 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <vector> #include <array> #include <algorithm>using namespace std; using namespace cv;int main() {str…

P3373 【模板】线段树 2(乘法与加法)(内附封面)

【模板】线段树 2 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面三种操作&#xff1a; 将某区间每一个数乘上 x x x&#xff1b;将某区间每一个数加上 x x x&#xff1b;求出某区间每一个数的和。 输入格式 第一行包含三个整数 n , q , m n,q,m n,…

aws中opensearch 日志通(Centralized Logging with OpenSearch)2.0(一)

aws日志通2.0 实现全面的日志管理和分析功能 一体化日志摄取 &#xff1a;把aws服务器日志和应用日志传输到opensearch域中无代码日志处理 &#xff1a;在网页控制台中就可以实现数据处理开箱即用 &#xff1a;提供可视化模版&#xff08;nginx、HTTP server &#xff09; 架构…

自定义MVC增删改查

目录 mymvcdemo是自定义mvc框架的使用示例 1.1 实体类 1.2 dao方法 1.3 写Service / biz 三层架构 1.4 建action 相当于selvert 1.5 con连接MySQL 8.0 版本 1.6 配置文件 XML 1.7 主界面布局 1.8 增加界面布局 1.9 写tld配置文件 2.0 注意架包 我是已经打包好的 mymv…

Expectation (Easy Version) 2023“钉耙编程”中国大学生算法设计超级联赛(5)hdu7330

Problem - 7330 题目大意&#xff1a;有n次游戏&#xff0c;每次游戏有a/b的概率获胜&#xff0c;且相互独立&#xff0c;如果当前赢了cnt次游戏&#xff0c;那么这次游戏会赢得的分数&#xff0c;问最后得分的期望 1<n<1e6;1<m,a<b<998244353 思路&#xff…