回文侦探:三种境界破解最长回文子串
回文侦探三种境界破解最长回文子串LeetCode 5. 最长回文子串—— 从暴力到线性看懂回文问题的三种解题境界。一、故事开场你是回文侦探想象你接到一个任务在一串字符里找出最长的镜像文字。比如babad里bab和aba都是回文 —— 正着读反着读都一样。你的目标是在所有回文子串中找到最长的那个。但字符串可能有 1000 个字符肉眼扫描不现实。这就是 LeetCode 第 5 题 ——最长回文子串。它看似简单却藏着三种截然不同的解法境界。二、暴力解法为什么不直接枚举最笨的方法枚举所有子串判断是不是回文。子串数量O(n2)O(n^2)O(n2)判断回文O(n)O(n)O(n)总时间O(n3)O(n^3)O(n3)面试官听了会摇头。我们需要更聪明的方法。三、解法一中心扩展法面试首选核心思路回文串有个特点它有一个中心两边对称。中心有两种可能1 个字符奇数长度如aba2 个字符偶数长度如abba所以遍历每个字符分别作为两种中心向两边扩展直到不再对称为止。下标: 0 1 2 3 4 字符: b a b a d ↑ i1中心 扩展: 左0, 右2 → bb ✅ 左-1, 右3 → 越界停 得到回文: bab长度 3代码实现classSolution{publicStringlongestPalindrome(Strings){if(snull||s.length()1)return;intstart0,end0;for(inti0;is.length();i){intlen1expand(s,i,i);// 奇数中心intlen2expand(s,i,i1);// 偶数中心intlenMath.max(len1,len2);if(lenend-start){starti-(len-1)/2;endilen/2;}}returns.substring(start,end1);}privateintexpand(Strings,intleft,intright){while(left0rights.length()s.charAt(left)s.charAt(right)){left--;right;}returnright-left-1;// 实际回文长度}}复杂度时间O(n2)O(n^2)O(n2)—— 每个中心最多扩展nnn次空间O(1)O(1)O(1)—— 只记录左右边界评价就像一个侦探从每个可能的中心点开始向两边展开推理。虽然要查nnn个中心点但每个案子都不复杂。四、解法二动态规划理解回文的本质核心思路中心扩展是从中间向两边看动态规划则是从小回文推大回文。定义dp[i][j]子串s[i..j]是否为回文串。状态转移s[i] ! s[j]→dp[i][j] false首尾不同肯定不是s[i] s[j]→ 看去掉首尾后是不是回文如果子串长度≤2\leq 2≤2如a或aa→ 直接为true否则dp[i][j] dp[i1][j-1]s abba dp[0][3]: s[0]a, s[3]a → 看 dp[1][2] dp[1][2]: s[1]b, s[2]b → 长度2 → true 所以 dp[0][3] true ✅遍历顺序很关键i必须从大到小因为依赖i1j从小到大。代码实现classSolution{publicStringlongestPalindrome(Strings){intns.length();if(n2)returns;boolean[][]dpnewboolean[n][n];intstart0,maxLen1;for(intin-1;i0;i--){for(intji;jn;j){if(s.charAt(i)s.charAt(j)){if(j-i2){dp[i][j]true;}else{dp[i][j]dp[i1][j-1];}}if(dp[i][j](j-i1)maxLen){maxLenj-i1;starti;}}}returns.substring(start,startmaxLen);}}复杂度时间O(n2)O(n^2)O(n2)空间O(n2)O(n^2)O(n2)—— 需要二维数组评价就像建立一个回文档案库把每个小片段的回文性质都记录下来。当你想知道一个大片段是不是回文时只需要查档案而不需要重新验证。五、解法三马拉车算法Manacher—— 线性时间的奇迹核心思路前面两种方法都是O(n2)O(n^2)O(n2)能不能更快马拉车算法做到了O(n)O(n)O(n)。它的核心思想是利用回文的对称性避免重复计算。但直接处理奇偶长度很麻烦所以第一步是预处理在每个字符间插入#把字符串变成统一奇数长度。原串: a b b a 处理: # a # b # b # a # 下标: 0 1 2 3 4 5 6 7 8现在所有回文都是奇数长度中心只有一个。算法维护一个最右边界right和对应的中心center。当处理位置i时如果i在right左边它关于center的对称点mirror已经被算过了可以直接利用但需要注意边界限制不能直接照搬代码实现classSolution{publicStringlongestPalindrome(Strings){if(snull||s.length()1)return;// 预处理插入 #统一奇偶StringBuildersbnewStringBuilder(#);for(charc:s.toCharArray()){sb.append(c).append(#);}Stringtsb.toString();intnt.length();int[]pnewint[n];// p[i] 以 i 为中心的回文半径intcenter0,right0;// 当前最右回文的中心和右边界intmaxLen0,start0;// 记录最长回文for(inti0;in;i){// 1. 利用对称性初始化 p[i]intmirror2*center-i;// i 关于 center 的对称点if(iright){p[i]Math.min(right-i,p[mirror]);}// 2. 尝试继续扩展intli-(p[i]1);intri(p[i]1);while(l0rnt.charAt(l)t.charAt(r)){p[i];l--;r;}// 3. 更新最右边界if(ip[i]right){centeri;rightip[i];}// 4. 记录最长回文转回原串坐标if(p[i]maxLen){maxLenp[i];start(i-p[i])/2;}}returns.substring(start,startmaxLen);}}复杂度时间O(n)O(n)O(n)—— 每个字符最多被访问常数次空间O(n)O(n)O(n)—— 预处理和半径数组评价就像一位老练的侦探不会每次遇到相似线索都从头推理。他会建立对称档案发现 A 和 B 对称A 的结论可以直接套用到 B 上。这是算法世界里最美的偷懒艺术。六、三种境界对比境界算法时间空间核心思想推荐指数凡人暴力枚举O(n3)O(n^3)O(n3)O(1)O(1)O(1)枚举所有子串⭐高手中心扩展O(n2)O(n^2)O(n2)O(1)O(1)O(1)从中心向两边扩展⭐⭐⭐⭐⭐大师动态规划O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)小回文推大回文⭐⭐⭐⭐神仙马拉车O(n)O(n)O(n)O(n)O(n)O(n)利用对称性避免重复计算⭐⭐⭐选哪个面试写代码→ 中心扩展法代码短、空间优、不易出错理解回文本质→ 动态规划是很多回文类题的基础追求极限性能→ 马拉车算法但代码复杂面试一般不考七、写在最后回文问题的美在于它把对称这个直觉概念变成了可以量化的算法。从中心扩展的直观到动态规划的系统再到马拉车算法的优雅三种解法像三种人生境界中心扩展是活在当下动态规划是积累经验马拉车则是站在经验的肩膀上飞翔。但归根结底最实用的往往是那个看起来最笨的中心扩展法 —— 因为它足够简单足够可靠就像生活中那些朴实却有效的道理。简单往往是最深的功力。欢迎在评论区分享你的理解或者指出我表述不清的地方。一起进步

相关新闻

Android 17 升级后 System.load 报错排查与加固兼容指南

Android 17 升级后 System.load 报错排查与加固兼容指南

Android 17升级后System.load报错:SO文件只读权限与加固兼容性排查 Android 项目升级系统或 targetSdk 后出现 UnsatisfiedLinkError,最容易被误判为“ABI 不匹配”、“SO 文件未打入包”或“加固破坏了库文件”。这些确实是可能的原因,但在…

2026/8/3 1:21:29 阅读更多 →
时间注意力机制:从原理到PyTorch实战,提升时序模型预测能力

时间注意力机制:从原理到PyTorch实战,提升时序模型预测能力

1. 从“平均主义”到“重点主义”:为什么我们需要时间注意力在时序数据分析的日常工作中,我们常常陷入一种“平均主义”的陷阱。无论是处理传感器读数、股票价格序列、用户行为日志,还是自然语言中的词向量序列,一个惯常的做法是&…

2026/8/3 1:20:28 阅读更多 →
从24个HTML5游戏源码到实战进阶:高效学习与改造指南

从24个HTML5游戏源码到实战进阶:高效学习与改造指南

1. 项目概述:从“收藏”到“创造”的转变每次在网上看到“分享XX个游戏源代码”这样的标题,很多开发者,尤其是刚入行的朋友,都会心头一热,感觉像是找到了一个宝库。确实,手头拥有24个不同风格、不同玩法的网…

2026/8/3 1:20:28 阅读更多 →

最新新闻

当AIOps遇上老板:如何用数据说服管理层重构屎山?

当AIOps遇上老板:如何用数据说服管理层重构屎山?

当AIOps遇上老板:如何用数据说服管理层重构屎山摘要:AIOps落地最大的阻力往往不是技术,而是管理层对"重构屎山"的成本顾虑。本文以《AIOps原则》为底层逻辑,提供一套用数据说话、用金钱量化的沟通框架。从MTTR货币化、技…

2026/8/3 2:09:49 阅读更多 →
UE5本地化核心配置PropertyNames.ini深度解析与实战指南

UE5本地化核心配置PropertyNames.ini深度解析与实战指南

1. 项目概述:为什么PropertyNames.ini值得深挖?如果你在UE5项目里做过本地化,尤其是涉及C代码的文本翻译,大概率遇到过这个场景:你在代码里写了一句FText::FromString(TEXT(“Hello World”)),然后信心满满…

2026/8/3 2:09:49 阅读更多 →
AI论文检测技术解析与应对策略

AI论文检测技术解析与应对策略

1. 论文AI检测的现状与核心问题最近一年,学术界对AI生成内容的检测需求呈现爆发式增长。Turnitin、iThenticate等主流查重系统纷纷推出AI检测模块,国内知网、万方等平台也在快速跟进。这种技术演进直接反映了学术界对AI写作工具的警惕态度。我经手过近百…

2026/8/3 2:09:49 阅读更多 →
Linux内核-文件系统-文件系统目录和文件操作

Linux内核-文件系统-文件系统目录和文件操作

文件系统namei.c源文件是用来处理文件系统名和节点关系,文件的一些操作如打开关闭等 原文链接:Linux内核-文件系统-文件系统目录和文件操作 – kidwjb的小站 一个文件只对应一个inode 目录项结构体 struct dir_entry {unsigned short inode; …

2026/8/3 2:09:49 阅读更多 →
Unity开发系统性排障:解决UI渲染与物理交互失效难题

Unity开发系统性排障:解决UI渲染与物理交互失效难题

1. 项目概述:Unity开发中的“顽疾”与系统性排障在Unity项目开发的中后期,尤其是临近上线或进行大规模功能迭代时,开发者常常会遭遇一些看似“玄学”的问题。UI元素在特定设备上闪烁、消失,或者物理碰撞时灵时不灵,角色…

2026/8/3 2:09:49 阅读更多 →
今天不学AI劳动技能,明年简历将被HR系统自动归入“低适配”队列

今天不学AI劳动技能,明年简历将被HR系统自动归入“低适配”队列

更多请点击: https://codechina.net 第一章:AI劳动技能的定义与职场适配逻辑 AI劳动技能并非指人类模仿AI的行为,而是人在人机协同工作范式下所必需的新质能力组合——它涵盖对AI系统意图的理解力、提示工程的精准表达力、输出结果的批判性评…

2026/8/3 2:08:49 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →