东方博宜OJ 2362:前缀和后缀 ← KMP算法
【题目来源】https://oj.czos.cn/p/2362【题目描述】给定若干由小写字母组成的字符串这些字符串总长≤4×10^5在每个字符串中求出所有既是前缀又是后缀的子串长度。例如ababcababababcabab既是前缀又是后缀的abababababcababababcababababcabab。【输入格式】输入若干行每行一个字符串。【输出格式】对于每个字符串输出一行包含若干个递增的整数表示所有既是前缀又是后缀的子串长度。【输入样例】ababcababababcababaaaaa【输出样例】2 4 9 181 2 3 4 5【数据范围】字符串总长≤4×10^5。【算法分析】一运行超时及内存超限代码substr(0,i)截取下标 0 开始 i 个字符不是截到下标 i。#include bits/stdc.h using namespace std; int main() { string s; while(cins) { for(int i1; is.size(); i) { string xs.substr(0,i); string ys.substr(s.size()-i); if(xy) couti ; } coutendl; } return 0; } /* in: ababcababababcabab aaaaa out: 2 4 9 18 1 2 3 4 5 */二KMP解法● 基于字符串下标从 1 计算这个前提next[] 数组的涵义为next[i] 表示字符串前 i 个字符的最长公共前后缀长度。● 为什么递归 ne[] 数组就能找到所有答案答字符串 ababcababababcabab 的 next数组值为0 1 1 2 3 1 2 3 4 5 4 5 4 5 6 7 8 9。idx123456789101112131415161718Tababcababababcababne[]011231234545456789ne[18] 9 → 前 18 个字符的最长相等前后缀长度 9ne[9] 4 →前 9 个字符的最长相等前后缀长度 4ne[4] 2 →前 4 个字符的最长相等前后缀长度 2ne[2] 0 → 停止所以所有答案2 → 4 → 9 → 18● KMP算法的next数组与前缀表的关系【算法代码一】#include bits/stdc.h using namespace std; const int N4e55; int ne[N]; void getNext(string t) { int lent.length(); int i0,j-1; ne[0]-1; while(ilen) { if(j-1 || t[i]t[j]) { i,j; ne[i]j; } else jne[j]; } } int main() { ios::sync_with_stdio(0); cin.tie(0); string t; while(cint) { int lent.size(); getNext(t); stackint st; int pne[len]; while(p0) { st.push(p); pne[p]; } while(!st.empty()) { coutst.top() ; st.pop(); } coutlen\n; } return 0; } /* in: ababcababababcabab aaaaa out: 2 4 9 18 1 2 3 4 5 */【算法代码二】#include bits/stdc.h using namespace std; const int N4e55; int ne[N]; void getNext(string t) { int lent.length(); int i0,j-1; ne[0]-1; while(ilen) { if(j-1 || t[i]t[j]) { i,j; ne[i]j; } else jne[j]; } } void print(int x) { if(x0) return; print(ne[x]); coutx ; } int main() { string t; while(cint) { int lent.size(); getNext(t); print(ne[len]); coutlenendl; } return 0; } /* in: ababcababababcabab aaaaa out: 2 4 9 18 1 2 3 4 5 */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/160215718https://blog.csdn.net/hnjzsyjyj/article/details/127140892https://blog.csdn.net/hnjzsyjyj/article/details/146059543

相关新闻

OpenClaw插件生态:15款高效工具与开发实践

OpenClaw插件生态:15款高效工具与开发实践

1. OpenClaw插件生态概述 OpenClaw作为一款新兴的多功能自动化工具,其强大之处在于开放的插件架构设计。2026年版本通过模块化设计实现了功能解耦,核心系统仅保留基础运行环境,90%以上的功能实现都交由插件完成。这种架构带来的直接优势是用户…

2026/9/13 18:00:24 阅读更多 →
SAP ABAP文件上传下载类方法封装:方法参数设计最佳实践

SAP ABAP文件上传下载类方法封装:方法参数设计最佳实践

上个月接手一个物流行业的 SAP 存量项目,业务方翻来覆去就一个要求:旧的上传下载程序不要再搬了,界面按钮背后能不能直接调用后台的方法?我第一反应是,这需求听着简单,其实暴露了一个很多 ABAP 项目积压多年…

2026/9/13 18:00:24 阅读更多 →
Linux设备驱动开发实战:从内核模块到设备树与I2C驱动

Linux设备驱动开发实战:从内核模块到设备树与I2C驱动

做了几年 Linux 设备驱动开发,我必须先承认一个事实:驱动难,不是难在写代码,而是难在搞懂内核那套机制和硬件之间的配合关系。网上关于驱动开发的学习资料非常多,但多数要么讲得太理论,要么直接甩一个 hell…

2026/9/13 18:00:24 阅读更多 →

最新新闻

Authelia 生成 ML-DSA 后量子密钥对:authelia crypto pair mldsa generate 命令详解

Authelia 生成 ML-DSA 后量子密钥对:authelia crypto pair mldsa generate 命令详解

Authelia 生成 ML-DSA 后量子密钥对:authelia crypto pair mldsa generate 命令详解 【免费下载链接】authelia The Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready. 项目地址: https://gitcode.com/…

2026/9/13 18:55:48 阅读更多 →
C++物业管理系统代码剖析:面向对象、文件持久化与数据校验

C++物业管理系统代码剖析:面向对象、文件持久化与数据校验

简介:C物业管理系统是一份完整的课程设计与实战项目资源,适合学习C面向对象编程、文件读写、GUI开发及数据库应用的开发者参考。压缩包共99个文件,包含32个cpp源文件、31个头文件、29个ui界面文件,另有sql数据库脚本、Qt工程配置与…

2026/9/13 18:55:48 阅读更多 →
Claude-Red AI安全模块:对抗性攻击与防御的智能解决方案完整指南

Claude-Red AI安全模块:对抗性攻击与防御的智能解决方案完整指南

Claude-Red AI安全模块:对抗性攻击与防御的智能解决方案完整指南 【免费下载链接】Claude-Red claude-red is a curated library of offensive security skills designed for the Claude skills system. Each skill is a structured SKILL.md file that primes Clau…

2026/9/13 18:55:48 阅读更多 →
Symfony 命令行测试避坑指南:runCommand 与 verbosity 一次讲透

Symfony 命令行测试避坑指南:runCommand 与 verbosity 一次讲透

Symfony 命令行测试避坑指南:runCommand 与 verbosity 一次讲透 【免费下载链接】nuclei-templates Community curated list of templates for the nuclei engine to find security vulnerabilities. 项目地址: https://gitcode.com/GitHub_Trending/nu/nuclei-te…

2026/9/13 18:55:48 阅读更多 →
LLM技术周报:RWKV-5架构与动态推理优化实践

LLM技术周报:RWKV-5架构与动态推理优化实践

1. 项目概述:LLM Weekly技术周报的价值与定位LLM Weekly作为大语言模型领域的技术周报,其核心价值在于为从业者提供经过筛选的高密度技术信息。不同于普通的新闻聚合,这类周报需要具备三个关键特征:技术深度筛选(过滤掉…

2026/9/13 18:55:48 阅读更多 →
如何用 client_connected Reducer 拒绝 SpacetimeDB 的指定客户端连接

如何用 client_connected Reducer 拒绝 SpacetimeDB 的指定客户端连接

如何用 client_connected Reducer 拒绝 SpacetimeDB 的指定客户端连接 【免费下载链接】SpacetimeDB Development at the speed of light 项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB SpacetimeDB 的模块对外网暴露,任何客户端都能尝试连…

2026/9/13 18:54:48 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →