题目

题解

暴力法

我们根据回文字符串特点进行判断一个字符串是不是回文。

// 回文子串:首尾对称相等
const isPalindrome = s => {// abba abafor (let i = 0; i < Math.floor(s.length / 2); i++) {if (s[i] !== s[s.length - 1 - i]) {return false}}return true
}/*** @param {string} s* @return {string}*/
var longestPalindrome = function(s) {let answer = ''if (s.length <= 1) return s[0] || ''for (let i = 0; i < s.length - 1; i++) {for (let j = i + 1; j <= s.length; j++) {curStr = s.substring(i, j)if (curStr.length > answer.length && isPalindrome(curStr)) {answer = curStr}}}return answer
};

动态规划

  • 一个回文字符串 abdba 去掉首尾后仍是回文 bdb
  • 由此推导状态转移方程 dp
  • dp[i][j] 表示 s.substring(i, j+1) 这样一个字符串是不是回文字符串
  • dp[i][j] = (s[i] === s[j]) && dp[i+1][j-1]
  • dp[i+1][j-1] 即就表示去掉首位字符后
  • 我们还需要考虑一个特殊情况 类似 a ab aba 肯定存在回文串 即 j - i <= 2
  • 动态规划就是充分利用之前缓存的计算结果,快速推倒出一个字符串是不是一个回问文串
  • 动态规划也是典型的 空间换时间的一种思路
/*** @param {string} s* @return {string}*/
var longestPalindrome = function(s) {const len = s.lengthlet answer = ''const dp = Array.from(new Array(len), () => new Array(len).fill(false))// 此处可以省略 base state 初始化 dp[i][j] = truefor (let i = len - 1; i >= 0; i--) {for (let j = i; j < len; j++) {// 状态转移方程dp[i][j] = (s[i] === s[j]) && (j - i <= 2 || dp[i+1][j-1])// 更新最长子串if (dp[i][j]) {console.log(s.substring(i, j + 1))}if (dp[i][j] && (j - i >= answer.length)) {answer = s.substring(i, j + 1)}}}
//    console.log(dp)return answer
};

推荐阅读

帅地:告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我(万字长文)​zhuanlan.zhihu.com

如何理解动态规划?​www.zhihu.com

ps: 欢迎关注我的公众号 xyz编程日记,觉得不错的帮忙点个 ,点个在看。

最长回文子串_5. 最长回文子串相关推荐

  1. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  2. 最长回文子序列与最长回文子串

    最长回文子序列与最长回文子串不同. 字符串的子串:一个字符串中连续的一段就是这个字符串的子串. 最长回文子串:就是字符串中最长的身为回文串的子串. 最长回文子序列不一定连续 最长回文子序列: 方法一: ...

  3. 【代码训练营】day56 | 647. 回文子串 516.最长回文子序列

    所用代码 java 回文子串 LeetCode 647 题目链接:回文子串 LeetCode 647 - 中等 思路 dp[i] [j]:[i, j]子串是否是回文子串,是回文就是true 递推公式: ...

  4. 最长回文子串与最长回文子序列

    文章目录 最长回文子串与最长回文子序列 最长回文子串 题目描述 dp解法 从中心扩展 马拉车算法 最长回文子序列 题目描述 dp 解法 递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetC ...

  5. LeetCode / Scala - 无重复字符最长子串 ,最长回文子串

    一.引言 LeetCode 里有一类字符子串问题,这里主要分析无重复字符的最长子串与最长回文子串,总结相关方法. 二.无重复字符最长子串 1.题目要求 给定字符串 s,要求找出字符内无重复的最长子串, ...

  6. CSU 1328 近似回文词【最长回文字符串(三种方法)】

    输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...

  7. 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串

    1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...

  8. python求最大回文数_python最长回文串算法

    给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...

  9. 最长回文子序列 python_516. 最长回文子序列(Python)

    题目 难度:★★★☆☆ 类型:字符串 方法:动态规划 力扣链接请移步本题传送门 更多力扣中等题的解决方案请移步力扣中等题目录 给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度.可以假 ...

  10. 算法设计 - LCS 最长公共子序列最长公共子串 LIS 最长递增子序列

    出处 http://segmentfault.com/blog/exploring/ 本章讲解: 1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度: 2. 与之类似但不 ...

最新文章

  1. 配置tomcat支持ssl
  2. js 函数定义三种方式
  3. 《大话数据结构》第9章 排序 9.3 冒泡排序(上)
  4. 【杂谈】新手如何掌握深度学习模型?赠书2本,星球券10张
  5. .net core DI 注册 Lazy 类型
  6. 在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
  7. 计算机网络和通信,计算机网络与通信技术
  8. 让大数据分析更简单,4步教你玩转MongoDB BI Connector
  9. 4.Windows Server2012 R2里面部署 MVC 的网站
  10. 这个火热的社区都升级到2.0了,你还不知道它?
  11. 【数学建模】第一讲-层次分析法
  12. Java基础--继承
  13. 食品的特征和鸿蒙,白粥养胃吗?知道这4种食物才是养胃高手
  14. 8421码的加减矫正
  15. Linux Qt cannot find -lGL
  16. C# 彻底删除文件或目录,不可恢复,文件清除工具
  17. python sql_pandasql:让python讲SQL
  18. ubuntu下安装 julia-1.4.2
  19. 双人零和博弈(two player zero-sum game)的性质
  20. ​力扣解法汇总606-根据二叉树创建字符串

热门文章

  1. python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
  2. 使用数据库引擎优化顾问添加建议索引
  3. SDN第六次上机作业
  4. Asp.net Boilerplate之AbpSession扩展
  5. Windows Server 2012 之部署Windows Server 更新服务(1)
  6. Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
  7. ubuntu编译安装vim7.4
  8. iOS 动画十四:Replicating Animations
  9. Case:update中把in改写成join性能提高数倍
  10. 提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化 1