题解:AtCoder AT_abc468_d Pre-Palindrome
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】AtCoderPre-Palindrome【题目描述】A string consisting of lowercase English letters is called agood stringif it satisfies the following condition.It can be turned into a palindrome by rewriting at most one character.For example,a,iwai, andabcdczaare good strings, butabcdandatcoderare not good strings. Note that, in particular, a palindrome is also a good string.You are given a stringS SSconsisting of lowercase English letters.Find the number of non-empty substrings (contiguous subsequences) ofS SSthat are good strings.Two substrings taken from different positions ofS SSare counted separately even if they are equal as strings.What is a substring?AsubstringofS SSis a string obtained by deleting zero or more characters from the beginning and zero or more characters from the end ofS SS.For example,abis a substring ofabc, butacis not a substring ofabc.由小写英文字母组成的字符串如果满足以下条件则称为好字符串。通过重写最多一个字符它可以变成一个回文串。例如a、iwai和abcdcza是好字符串但abcd和atcoder不是好字符串。注意特别地回文串本身也是好字符串。给定一个由小写英文字母组成的字符串S SS。求S SS中是好字符串的非空子串连续子序列的数量。即使两个子串作为字符串相等只要它们取自S SS的不同位置就分别计数。什么是子串S SS的子串是指从S SS的开头删除零个或多个字符、并从末尾删除零个或多个字符后得到的字符串。例如ab是abc的子串但ac不是abc的子串。【输入】The input is given from Standard Input in the following format:S SS【输出】Output the answer.【输入样例】ababa【输出样例】13【核心思想】问题分析给定字符串S SS求其中有多少个非空子串是好字符串——即通过修改最多一个字符可以变成回文串。回文串本身也是好字符串。这是一个双指针扩展 回文判定问题核心在于利用回文的对称性从中心向两边扩展并统计不匹配字符数。算法选择中心扩展法枚举每个可能的回文中心奇数长度为中心字符偶数长度为中心缝隙向两边扩展并统计不匹配数提前终止不匹配数超过1 11时立即停止扩展关键步骤读入数据读取字符串S SS长度n nn奇数长度子串中心m i d midmid从0 00到n − 1 n-1n−1l r m i d l r midlrmidm i s 0 mis 0mis0a n s ← a n s 1 ans \leftarrow ans 1ans←ans1长度为1 11总是好字符串向两边扩展l 0 l 0l0且r n − 1 r n-1rn−1l ← l − 1 l \leftarrow l - 1l←l−1r ← r 1 r \leftarrow r 1r←r1m i s ← m i s [ s [ l ] ≠ s [ r ] ] mis \leftarrow mis [s[l] \neq s[r]]mis←mis[s[l]s[r]]若m i s ≤ 1 mis \leq 1mis≤1a n s ← a n s 1 ans \leftarrow ans 1ans←ans1否则b r e a k breakbreak偶数长度子串中心缝隙m i d midmid从0 00到n − 2 n-2n−2l m i d l midlmidr m i d 1 r mid 1rmid1m i s [ s [ l ] ≠ s [ r ] ] mis [s[l] \neq s[r]]mis[s[l]s[r]]若m i s ≤ 1 mis \leq 1mis≤1a n s ← a n s 1 ans \leftarrow ans 1ans←ans1然后向两边扩展同奇数情况输出结果a n s ansans时间/空间复杂度时间复杂度O ( n 2 ) O(n^2)O(n2)最坏情况每个中心扩展O ( n ) O(n)O(n)共2 n 2n2n个中心空间复杂度O ( 1 ) O(1)O(1)仅使用指针和计数器中心扩展与提前终止的核心思想回文的对称性从中心向两边扩展时新加入的字符对( s [ l ] , s [ r ] ) (s[l], s[r])(s[l],s[r])若相同则不影响回文性若不同则增加一次修改需求修改次数的单调性向两边扩展只会增加或保持不匹配数不会减少。因此一旦m i s 1 mis 1mis1后续扩展必然不满足条件可直接终止两种中心类型奇数长度子串有n nn个中心点偶数长度子串有n − 1 n-1n−1个中心缝隙覆盖所有可能的子串计数策略每个满足m i s ≤ 1 mis \leq 1mis≤1的扩展状态对应一个好字符串子串直接累加。由于不同位置的相同子串分别计数无需去重适用于回文相关子串统计、中心扩展类字符串问题【算法标签】#模拟【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglong// 将int定义为long long避免子串数量过多导致溢出string s;// 输入的字符串Sintans;// ans记录好字符串子串的总数signedmain()// 使用signed main配合#define int long long{cins;// 读入字符串Sintns.size();// n为字符串S的长度// 第一步枚举奇数长度子串的中心点中心为单个字符for(intmid0;midn;mid)// 遍历每个可能的中心位置{intlmid,rmid;// 初始化左右指针都指向中心点形成长度为1的子串intmis0;// mis记录当前子串中不匹配的对称位置对数即需要修改的字符数ans;// 长度为1的子串总是回文串0次修改一定是好字符串直接计数while(l0rn-1)// 向两边扩展确保不越界{l--;// 左指针向左移动r;// 右指针向右移动mis(s[l]!s[r]);// 如果新扩展的两端字符不同不匹配数加1if(mis1)// 如果不匹配数不超过1最多修改1个字符可变成回文ans;// 该子串是好字符串计数加1else// 如果不匹配数超过1break;// 继续扩展只会增加不匹配数直接退出}}// 第二步枚举偶数长度子串的中心点中心为两个相邻字符之间for(intmid0;midn-1;mid)// 遍历每对相邻字符作为中心{intlmid,rmid1;// 初始化左右指针指向相邻的两个字符形成长度为2的子串intmis(s[l]!s[r]);// 初始不匹配数为中间两个字符是否相同0或1if(mis1)// 如果长度为2的子串最多需要修改1个字符{ans;// 该长度为2的子串是好字符串计数加1while(l0rn-1)// 向两边扩展确保不越界{l--;// 左指针向左移动r;// 右指针向右移动mis(s[l]!s[r]);// 如果新扩展的两端字符不同不匹配数加1if(mis1)// 如果不匹配数不超过1ans;// 该子串是好字符串计数加1else// 如果不匹配数超过1break;// 继续扩展只会增加不匹配数直接退出}}}coutansendl;// 输出好字符串子串的总数return0;}【运行结果】ababa 13

相关新闻

计算机毕业设计之基于springboot的高校二手物品交易平台

计算机毕业设计之基于springboot的高校二手物品交易平台

由于移动应用技术的持续性的快速发展,现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此,许多的人工传统行业也开始与互联网结合,不再一味的依靠人工手动,努力打造半自动数字化甚至是全自动数字化模…

2026/10/13 9:27:25 阅读更多 →
物联网设备电池寿命优化与NBM5100A应用解析

物联网设备电池寿命优化与NBM5100A应用解析

1. 电池寿命增强器的核心挑战与解决方案在物联网设备和便携式电子产品中,纽扣电池(如CR2032)和锂亚硫酰电池因其体积小、能量密度高而广受欢迎。然而这类电池存在两个致命缺陷:一是输出电流能力有限(通常仅5-10mA&…

2026/10/10 22:11:02 阅读更多 →
物联网安全芯片SE050与PIC32MZ的硬件集成实践

物联网安全芯片SE050与PIC32MZ的硬件集成实践

1. 为什么物联网设备需要专用安全芯片?在智能家居、工业4.0和智慧城市等物联网应用中,我们经常看到这样的场景:一台智能门锁被黑客通过蓝牙协议漏洞破解,一个工业传感器因固件被篡改而发送虚假数据,或者整个楼宇控制系…

2026/10/10 11:44:52 阅读更多 →

最新新闻

t3code工程化方案:从代码规范到自动化质量门禁的落地实践

t3code工程化方案:从代码规范到自动化质量门禁的落地实践

不少朋友最近在问 t3code 到底是什么、能拿来做什么。说实话这个词并没有一个官方定义,圈子里聊起来通常是指一套面向改进日常开发流程的代码工程化方案——名字里的 t3 可以理解成“Third-generation”的意思,强调的是第三代代码组织和构建思路&#xf…

2026/10/13 9:27:04 阅读更多 →
使用 Farm + Tauri 构建 Vanilla TypeScript 桌面应用:模板结构、开发流程与前后端桥接实战

使用 Farm + Tauri 构建 Vanilla TypeScript 桌面应用:模板结构、开发流程与前后端桥接实战

前端构建构建工具开发工具 【免费下载链接】farm Extremely fast Vite-compatible web build tool written in Rust 项目地址: https://gitcode.com/gh_mirrors/fa/farm 点击查看 免费下载 导读 本篇指南围绕 Farm 官方脚手架 create-farm-rs 内置的 tauri/vanill…

2026/10/13 9:27:04 阅读更多 →
t3code实战指南:终端AI编程助手如何修复代码与提交PR

t3code实战指南:终端AI编程助手如何修复代码与提交PR

我最初误以为代码自动生成还需要等两年,直到在终端里连着用t3code改完三个issue之后,才意识到这种认知已经过期了。它不生成一个完整的项目,而是像有个熟悉代码库的同事坐在命令行旁边,帮你定位问题、改完代码、跑测试&#xff0c…

2026/10/13 9:27:04 阅读更多 →
分段线性函数拐点检测:从变点识别到断点定位实战解析

分段线性函数拐点检测:从变点识别到断点定位实战解析

做数据拟合时,我经常遇到一类很典型的需求:给定一堆看起来“弯折”的数据点,想找到它在哪个位置斜率发生了突变,也就是找出分段线性函数中间的拐点。比如传感器标定曲线、金融时间序列的制度切换、流量阈值识别,甚至医…

2026/10/13 9:27:04 阅读更多 →
皮尔逊相关系数置信区间:Fisher变换与Bootstrap实战指南

皮尔逊相关系数置信区间:Fisher变换与Bootstrap实战指南

1. 只报一个r值&#xff0c;在评审和业务场景里会碰哪些壁先说一个我常碰到的场景&#xff1a;某段时间帮同事看一份分析报告&#xff0c;里面写“变量A和变量B的皮尔逊相关系数为0.63&#xff0c;p<0.01”。一眼看去挺正常&#xff0c;但当我翻到样本量那一栏&#xff0c;发…

2026/10/13 9:27:04 阅读更多 →
Vue可视化打印插件hiprint的核心原理与实战应用

Vue可视化打印插件hiprint的核心原理与实战应用

1. 项目概述&#xff1a;vue-plugin-hiprint 打印设计解决方案在Web应用开发中&#xff0c;打印功能一直是容易被忽视却实际需求强烈的模块。传统打印方案往往面临样式错乱、交互死板、适配困难等问题。vue-plugin-hiprint 作为一款开源的Vue打印设计插件&#xff0c;提供了从元…

2026/10/13 9:26:01 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →