516. 最长回文子序列

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1:

输入:s = “bbbab”
输出:4
解释:一个可能的最长回文子序列为 “bbbb” 。
示例 2:

输入:s = “cbbd”
输出:2
解释:一个可能的最长回文子序列为 “bb” 。

大佬们说这是一道典型的模板题,但我就是看不出来,慢慢来吧!

看到这题的第一反应是肯定要将这个问题简化成子问题,因为暴力的方法找子序列还是挺费时间的,况且题目还特别告述我们要求最长回文子序列,回文序列有个特点是:一个回文序列的长度大于2,那么减去它的首尾字符得到的序列仍然是回文序列。看到这里我们离AC题目又近了一步,因为状态转移方程的第一步我们已经踏出去了。

动态规划的关键是确定状态的含义,即我们定义的dp数组的含义。这里我们可以定义dp[i] [j] 为s[i]到s[j]的最长回文子序列的长度,根据上面我们的第一步状态转移方程可以写出完整的状态转移方程。

当s[i]==s[j]时,dp[i] [j] = dp[i-1] [j-1]+2

当s[i]!=s[j]时, dp[i] [j] = max(dp[i+1] [j], dp[i] [j-1])

那么最后答案返回dp[0] [n-1]即可。

代码如下:

class Solution {
public:int longestPalindromeSubseq(string s) {int n=s.size();vector<vector<int>> dp(n,vector<int>(n));for(int i=n-1;i>=0;i--){dp[i][i]=1;for(int j=i+1;j<n;j++){dp[j][j]=1;if(s[i]==s[j])dp[i][j]=dp[i+1][j-1]+2;elsedp[i][j]=max(dp[i+1][j],dp[i][j-1]);}}return dp[0][n-1];}
};

力扣516:最长回文子序列相关推荐

  1. leetcode - 516. 最长回文子序列

    516. 最长回文子序列 -------------------------------------------- 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 ...

  2. 【Leetcode】516. 最长回文子序列

    516. 最长回文子序列 题目描述 解题思路:动态规划 题目描述 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度.子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任 ...

  3. 代码随想录补打卡 647 回文子串 516 最长回文子序列

    647 回文子串 代码如下 func countSubstrings(s string) int {    //dp[i][j]数组的含义是i-j这个范围的元素是否为回文串 dp := make([] ...

  4. Java实现 LeetCode 516 最长回文子序列

    516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...

  5. LeetCode 516. 最长回文子序列(动态规划)

    1. 题目 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "b ...

  6. Leetcode 516.最长回文子序列

    Time: 20190906 Type: Medium 题目描述 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" ...

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

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

  8. 120. Leetcode 516. 最长回文子序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j] 步骤二.推断状态方程: 如果当前的s[i] == s[j], ...

  9. 【Leetcode刷题Python】516. 最长回文子序列

    1 题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度. 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列. 示例 1: 输入:s = &q ...

  10. LeetCode.516 最长回文子序列 详解

    题目详情 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bb ...

最新文章

  1. hibernate中load和get方法的区别 lazy的策略
  2. python等间隔取样
  3. malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!...
  4. 谷歌浏览器mac_Mac用户浏览网页不可少的浏览器-谷歌Chrome
  5. linux中menu命令,menucofig 详解
  6. 8问8答,一篇文章读懂空间音效
  7. 基于 HTML5 Canvas 的交互式地铁线路图 1
  8. Vue 3.0响应式API案例
  9. Python风格总结: List sort()方法
  10. angularjs java 实例_[Java教程]angularjs小练习(分别通过ng
  11. win10计算器_30年后终更新!新一代Win10记事本详细体验
  12. 程序员之死——致所有重压下的你
  13. 游戏服务器经常被DDOS攻击应该怎么办?
  14. 影院在线选座购票API接口
  15. 动态IP与静态ip的区别是什么
  16. Ubuntu 16.04下载编译Android11源码
  17. 二维码生成工具微信小程序源码下载
  18. C++静态成员对象与静态成员函数
  19. LeetCode题解(0625):最小因式分解(Python)
  20. Golang 基础:底层并发原语 Mutex RWMutex Cond WaitGroup Once等使用和基本实现

热门文章

  1. $slots.default
  2. AlphaGo打星际,人类的胜算几何?
  3. tcp_tw_recycle参数引发的故障
  4. GitHub Copilot一直等待问题
  5. 经典电影推荐!!!保质保量
  6. RN小数转中文数字(0.001=千分之一)
  7. 收藏这些vue项目性能优化方式,总有一天能用上
  8. 今天写了老师布置的作业,还没写完 哇哇哇 是用递归方法求n阶勒让德多项式的值 题目就不写了【因为我也不知道怎么搞 哈哈哈哈哈】我用的是整形哈
  9. 电商全渠道秩序维护 八爪鱼大数据来帮忙
  10. Stata:异方差和自相关稳健F检验和t检验