最长回文子序列 python_516. 最长回文子序列(Python)
题目
难度:★★★☆☆
类型:字符串
方法:动态规划
力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录
给定一个字符串 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)相关推荐
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
作者:寒小阳 时间: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 ...
- 最长回文子串和最长回文子序列
这两个题目我觉得可以放在一起讨论下: 字长回文子序列 首先是回文子序列的题目,涉及到子序列,一般都是不连续的问题: 那么首推动态规划,并且这个题目只要求返回长度,那么dp数组用来存子问题的最长回文串长 ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- python求最大回文数_python最长回文串算法
给定一个字符串,要求在这个字符串中找到符合回文性质的最长子串.所谓回文性是指诸如 "aba","ababa","abba"这类的字符串,当然 ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列
唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧. 首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判 ...
最新文章
- Java 序列化 之 单例模式
- 卡斯特罗的离去对古巴科技产业的未来有何影响?
- 数组nn从外围1递增_最完整的PyTorch数据科学家指南(1)
- C++ 顺序容器入门
- QMap与QHash
- java 如何发提示_消息提醒-如何实现收到待办给QQ发送提醒?
- Openshift3.9部署手册
- Docker系列四~docker安装mysql
- 一步一步学习Servlet之ServletContext对象
- qstore 的 chunk重构小记
- Dapper学习 - Dapper.Rainbow(三) - Read
- 风口猪炒股指标_低吸大长腿
- IPv4与IPv6的区别
- 将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
- 2021赤峰市地区高考成绩排名查询,2021年赤峰高考状元是谁分数多少分,历年赤峰高考状元名单...
- CSS 仿 iOS 系统通知数字样式
- 小蓝单车的“死法”:从梦幻开场到资金断链
- IDEO用户体验创新模式01
- 中国高分系列卫星介绍
- 《当程序员的那些狗日日子》(二十八)开展新工作
热门文章
- RuoYiApplication: Failed to retrieve application JMX service URL解决方法
- AT89C51定时器
- 获取头信息header中参数access_token失败,获取header头信息中带下划线参数失败
- BP神经网络算法推导及代码实现笔记zz
- 360浏览器扩展体验
- paillier同态加密算法库 如何生成 RSAPublicKey 和 RSAPrivateKey 并获得密钥字符串和公私钥文件
- GIM,输变电工程三维设计技术标准
- AAFD故障电弧探测器的重要性
- 站在2022年元旦展望未来
- 这是博客园的一个Bug吗?