当前位置: 首页 > news >正文

题解:AcWing 831 KMP字符串

【题目来源】

AcWing:831. KMP字符串 - AcWing题库

【题目描述】

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

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

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

【输入】

第一行输入整数 \(N\),表示字符串 \(P\) 的长度。

第二行输入字符串 \(P\)

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

第四行输入字符串 \(S\)

【输出】

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

【输入样例】

3
aba
5
ababa

【输出样例】

0 2

【解题思路】

image

【算法标签】

《AcWing 831 KMP字符串》 #KMP#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 100010, M = 1000010;  // 定义常量N和M,分别表示模式串和文本串的最大长度
int n, m;                           // n: 模式串长度,m: 文本串长度
char p[N], s[M];                    // p: 模式串,s: 文本串
int ne[N];                          // ne: next数组,用于KMP算法int main() {cin >> n >> p + 1 >> m >> s + 1;  // 输入模式串和文本串(从下标1开始存储)// KMP算法预处理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++;               // 匹配时j前进ne[i] = j;                               // 更新next数组}// 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++;               // 匹配时j前进if (j == n) {                            // 完全匹配printf("%d ", i - n);                // 输出匹配的起始位置j = ne[j];                          // 回退,继续匹配}}return 0;
}

【运行结果】

3
aba
5
ababa
0 2 
http://www.jsqmd.com/news/399273/

相关文章:

  • CVE-2016-6802
  • 探秘DS18B20:单总线数字温度传感器的原理与应用
  • 题解:AcWing 154 滑动窗口
  • 与相似的灵魂为邻——一位文化从业者的圈层选择
  • 题解:AcWing 3302 表达式求值
  • CST仿真:探索涡旋与聚焦的奇妙世界
  • 678678678
  • SaaS架构下AI原生应用的最佳实践与案例分析
  • 题解:P15369 『ICerOI Round 1』并非图论
  • 题解:AcWing 828 模拟栈
  • 深度解析AI原生应用领域的事件驱动机制
  • 大数据ETL处理:GPU加速方案设计与性能优化
  • C语言中的数据类型和变量
  • 题解:AcWing 827 双链表
  • 题解:AcWing 826 单链表
  • 题解:AcWing 802 区间和
  • js获取html相邻标签
  • 题解:AcWing 803 区间合并
  • 计算机毕业设计 | SpringBoot+vue科研项目验收管理系统(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue毕业论文管理系统 高校文档项目答辩平台(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue中山社区医疗综合服务平台(附源码+论文)
  • Flink 任务失败恢复机制Restart Strategy 和 Failover Strategy 怎么配才“又稳又不炸”
  • Tauri 前端配置把任何前端框架“正确地”接进 Tauri(含 Vite/Next/Nuxt/Qwik/SvelteKit/Leptos/Trunk)
  • 计算机毕业设计 | SpringBoot+vue毕业设计答辩平台 校园成绩管理系统(附源码+论文)
  • Tauri 项目结构前端壳 + Rust 内核,怎么协作、怎么构建、怎么扩展
  • 抖音评论自动采集|拓客|免登录
  • 当Claude Code负责人说amp;quot;编程已解决amp;quot;,测试工程师该慌吗?
  • Claude Code 安装教程(macOS / Linux / Windows PowerShell 一键脚本)【2026 最新】
  • 题解:AcWing 801 二进制中1的个数
  • 寒假第二十天