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

【leetcode】5.最长回文子串js

题目

代码-中心扩散法

好这题还是看题解了。

思路是采用中心扩散法,遍历到一个字符就以它为中心向两边扩散看最长的回文子串长度多少,如果比现有的长就更新当前最长的回文子串,没有就继续往下遍历。需要注意的点是回文子串可能是奇数长度和偶数长度两种情况。

/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { if (s.length < 2) return s let res = '' for (let i = 0; i < s.length; i++) { // 回文字串长度是奇数 helper(i, i) // 回文字串长度是偶数 helper(i, i+1) } function helper(left, right) { while (left >= 0 && right < s.length && s[left] === s[right]) { left-- right++ } // 这里用right - left - 1是因为循环之后left和right恰好是不满足条件的时刻 // 因此两个边界不能取,应该取left + 1到right - 1这个区间 if (right - left - 1 > res.length) { // slice左闭右开,取[left + 1, right - 1] res = s.slice(left + 1, right) } } return res };

时间复杂度是O(n²),空间复杂度是O(1)

代码-动态规划

原题解在这里:传送门(特别厉害啊我膜拜)

1. 定义dp数组

用一个二维数组dp[i][j]来表示字符串中下标从i到j的子串s[i...j]是不是回文子串

2. 状态转移规则

  • 当 s[i] !== s[j],显然 s[i..j] 不是回文串;
  • 当 s[i] === s[j] 时:
    • 若 j - i < 3(子串长度为2或3),只要两端字符相等就是回文串;
    • 否则要看内部子串 dp[i + 1][j - 1] 是否为回文。

3. 状态初始化

所有dp[i][i]都是true,因为只有单个字符肯定是回文。

4. 最终目标

在遍历过程中记录最长回文的起始下标 begin 和长度 maxLen,最终用 s.substring(begin, begin + maxLen) 返回。

这里就直接贴佬的代码了可供学习参考。

/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { const len = s.length; if (len < 2) return s; // 长度小于2,直接返回原串 let maxLen = 1; // 初始化最大长度 let begin = 0; // 初始化起始位置 const dp = Array.from({ length: len }, () => Array(len).fill(false)); // 所有长度为1的子串都是回文串 for (let i = 0; i < len; i++) { dp[i][i] = true; } const charArray = s.split(''); // 枚举子串结束位置 j for (let j = 1; j < len; j++) { // 枚举子串起始位置 i(必须 i < j) for (let i = 0; i < j; i++) { if (charArray[i] !== charArray[j]) { dp[i][j] = false; } else { if (j - i < 3) { dp[i][j] = true; // 长度为2或3,只要两端相等就是回文 } else { dp[i][j] = dp[i + 1][j - 1]; // 否则依赖内部是否回文 } } // 更新最长回文子串的位置和长度 if (dp[i][j] && j - i + 1 > maxLen) { maxLen = j - i + 1; begin = i; } } } return s.substring(begin, begin + maxLen); };

时间复杂度和空间复杂度都是O(n²)

http://www.jsqmd.com/news/1215249/

相关文章:

  • To B 科技公司宣传物料指南:为什么技术公司也要做实体画册?
  • 苹果起诉 OpenAI,表面争机密,实际争的是 AI 硬件入口
  • 郑州墙角发霉、窗边渗水?用“架构排错思维”拆解外墙漏水:基于窜水路径的数据化检测与避坑指南
  • SRE 实战手册(七)|故障复盘:黄金三问与判定三原则
  • Log打印方法调用栈信息
  • unity发布web嵌入到前端页面的接受参数
  • PDK在芯片设计中的核心作用与实战解析
  • 卡地亚中国官方售后服务中心|官方电话和详细网点地址权威信息通告(2026年7月最新) - 卡地亚服务中心
  • 浅谈“一企一技术”研发中心建设与企业创新发展
  • 2026年7月欧米茄中国专柜官方客服热线,最新信息客户服务指南 - 欧米茄官方服务中心
  • 半导体芯片相关名词概念简介
  • 选择马来西亚留学跳板升学,这4个风险要提前规避
  • 朔城区民办幼儿园怎么选?2025朔州家长择校核心维度深度解析朔城区民办幼儿园怎么选?
  • 星露谷物语模组开发终极指南:用SMAPI轻松创建游戏扩展 [特殊字符]
  • CAN总线波形解析:显隐性电平与异常波形诊断
  • 41-深链拉起只到首页-用Want解析和兜底页接住入口
  • 【工科软件类】萌新找工作指南
  • 2026最新8款团队适配AI编程助手深度实测
  • 投机解码:从eagle1到dflash
  • Claude PRD撰写避坑指南:从需求模糊到精准落地的7步标准化流程
  • 浪琴中国官方售后服务中心|全部地址与售后服务热线权威信息公示(2026年7月更新) - 浪琴服务中心
  • Dynamics 365 字段包含中文〇查询异常
  • 限时公开:我为某独角兽定制的ChatGPT面试官Prompt模板(含行为面试/系统设计/反问环节),仅剩87份可下载
  • DRAM刷新机制解析:从原理到优化实践
  • AI 智能生成关键词型文案,既符合算法又打动用户,两全其美
  • 基于HarmonyOS的AI租房预算分配器应用——从对齐到评估的全流程技术实践
  • 文件管理应用
  • SRE 实战手册(八)|组织架构与高效协作机制
  • 劳力士中国官方售后服务中心|服务热线及全部维修详细地址权威信息通知(2026年7月最新) - 劳力士服务中心
  • Python 并发请求实战:用 asyncio 把批量 API 调用提速 10 倍