题目

难度:★★★☆☆

类型:字符串

方法:动态规划

力扣链接请移步本题传送门

更多力扣中等题的解决方案请移步力扣中等题目录

给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。

示例

示例 1:

输入:

"bbbab"

输出:

4

一个可能的最长回文子序列为 "bbbb"。

示例 2:

输入:

"cbbd"

输出:

2

一个可能的最长回文子序列为 "bb"。

提示:

1 <= s.length <= 1000

s 只包含小写英文字母

解答

这道题使用动态规划来做。

定义:设输入字符串s的长度为n,设dp矩阵为nxn维,dp[i][j]表示以下标i开始,以下标j结尾的子串中最长回文子序列的长度。i<=j

初始化:设置dp矩阵为对角阵,即对角线处的所有元素为1,其他元素填充为0,因为当i=j时,选中的子串只包含一个字符。

递推公式:分两种情况,

第一,从下标i+1到j-1的串左右两头均各增加一个字符,如果新增的两个字符一致,也就是s[i]==s[j],那么将从下标i+1到j-1的串对应的最长回文子序列的长度加2即可,也就是dp[i][j]=dp[i+1]dp[j-1]+2

第二,如果新增的两个字符不等,也就是s[i]!=s[j],那么选取dp[i+1][j]和dp[i][j-1]中更大的数作为dp[i][j]即可。

这里需要注意的是,为了保证每次递推都可以取到该有的值,外层遍历应该逆序,内层遍历应该顺序进行。

返回值:最终返回dp[0][n-1]即可。

class Solution:

def longestPalindromeSubseq(self, s: str) -> int:

n = len(s)

dp = [[1 if i == j else 0 for i in range(n)] for j in range(n)]

for i in range(n-1, -1, -1):

for j in range(i+1, n):

if s[i] == s[j]:

dp[i][j] = dp[i+1][j-1] + 2

else:

dp[i][j] = max(dp[i+1][j], dp[i][j-1])

return dp[0][n-1]

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

最长回文子序列 python_516. 最长回文子序列(Python)相关推荐

  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. 最长回文子串和最长回文子序列

    这两个题目我觉得可以放在一起讨论下: 字长回文子序列 首先是回文子序列的题目,涉及到子序列,一般都是不连续的问题: 那么首推动态规划,并且这个题目只要求返回长度,那么dp数组用来存子问题的最长回文串长 ...

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

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

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

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

  8. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  9. 最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列

    唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧. 首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判 ...

最新文章

  1. Java 序列化 之 单例模式
  2. 卡斯特罗的离去对古巴科技产业的未来有何影响?
  3. 数组nn从外围1递增_最完整的PyTorch数据科学家指南(1)
  4. C++ 顺序容器入门
  5. QMap与QHash
  6. java 如何发提示_消息提醒-如何实现收到待办给QQ发送提醒?
  7. Openshift3.9部署手册
  8. Docker系列四~docker安装mysql
  9. 一步一步学习Servlet之ServletContext对象
  10. qstore 的 chunk重构小记
  11. Dapper学习 - Dapper.Rainbow(三) - Read
  12. 风口猪炒股指标_低吸大长腿
  13. IPv4与IPv6的区别
  14. 将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
  15. 2021赤峰市地区高考成绩排名查询,2021年赤峰高考状元是谁分数多少分,历年赤峰高考状元名单...
  16. CSS 仿 iOS 系统通知数字样式
  17. 小蓝单车的“死法”:从梦幻开场到资金断链
  18. IDEO用户体验创新模式01
  19. 中国高分系列卫星介绍
  20. 《当程序员的那些狗日日子》(二十八)开展新工作

热门文章

  1. RuoYiApplication: Failed to retrieve application JMX service URL解决方法
  2. AT89C51定时器
  3. 获取头信息header中参数access_token失败,获取header头信息中带下划线参数失败
  4. BP神经网络算法推导及代码实现笔记zz
  5. 360浏览器扩展体验
  6. paillier同态加密算法库 如何生成 RSAPublicKey 和 RSAPrivateKey 并获得密钥字符串和公私钥文件
  7. GIM,输变电工程三维设计技术标准
  8. AAFD故障电弧探测器的重要性
  9. 站在2022年元旦展望未来
  10. 这是博客园的一个Bug吗?