最长回文子串_5. 最长回文子串
题目
题解
暴力法
我们根据回文字符串特点进行判断一个字符串是不是回文。
// 回文子串:首尾对称相等
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. 最长回文子串相关推荐
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...
- 最长回文子序列与最长回文子串
最长回文子序列与最长回文子串不同. 字符串的子串:一个字符串中连续的一段就是这个字符串的子串. 最长回文子串:就是字符串中最长的身为回文串的子串. 最长回文子序列不一定连续 最长回文子序列: 方法一: ...
- 【代码训练营】day56 | 647. 回文子串 516.最长回文子序列
所用代码 java 回文子串 LeetCode 647 题目链接:回文子串 LeetCode 647 - 中等 思路 dp[i] [j]:[i, j]子串是否是回文子串,是回文就是true 递推公式: ...
- 最长回文子串与最长回文子序列
文章目录 最长回文子串与最长回文子序列 最长回文子串 题目描述 dp解法 从中心扩展 马拉车算法 最长回文子序列 题目描述 dp 解法 递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetC ...
- LeetCode / Scala - 无重复字符最长子串 ,最长回文子串
一.引言 LeetCode 里有一类字符子串问题,这里主要分析无重复字符的最长子串与最长回文子串,总结相关方法. 二.无重复字符最长子串 1.题目要求 给定字符串 s,要求找出字符内无重复的最长子串, ...
- CSU 1328 近似回文词【最长回文字符串(三种方法)】
输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- python求最大回文数_python最长回文串算法
给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...
- 最长回文子序列 python_516. 最长回文子序列(Python)
题目 难度:★★★☆☆ 类型:字符串 方法:动态规划 力扣链接请移步本题传送门 更多力扣中等题的解决方案请移步力扣中等题目录 给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度.可以假 ...
- 算法设计 - LCS 最长公共子序列最长公共子串 LIS 最长递增子序列
出处 http://segmentfault.com/blog/exploring/ 本章讲解: 1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度: 2. 与之类似但不 ...
最新文章
- 配置tomcat支持ssl
- js 函数定义三种方式
- 《大话数据结构》第9章 排序 9.3 冒泡排序(上)
- 【杂谈】新手如何掌握深度学习模型?赠书2本,星球券10张
- .net core DI 注册 Lazy 类型
- 在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
- 计算机网络和通信,计算机网络与通信技术
- 让大数据分析更简单,4步教你玩转MongoDB BI Connector
- 4.Windows Server2012 R2里面部署 MVC 的网站
- 这个火热的社区都升级到2.0了,你还不知道它?
- 【数学建模】第一讲-层次分析法
- Java基础--继承
- 食品的特征和鸿蒙,白粥养胃吗?知道这4种食物才是养胃高手
- 8421码的加减矫正
- Linux Qt cannot find -lGL
- C# 彻底删除文件或目录,不可恢复,文件清除工具
- python sql_pandasql:让python讲SQL
- ubuntu下安装 julia-1.4.2
- 双人零和博弈(two player zero-sum game)的性质
- ​力扣解法汇总606-根据二叉树创建字符串
热门文章
- python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
- 使用数据库引擎优化顾问添加建议索引
- SDN第六次上机作业
- Asp.net Boilerplate之AbpSession扩展
- Windows Server 2012 之部署Windows Server 更新服务(1)
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- ubuntu编译安装vim7.4
- iOS 动画十四:Replicating Animations
- Case:update中把in改写成join性能提高数倍
- 提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化 1