Time: 20190906
Type: Medium

题目描述

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

示例 1:
输入:

“bbbab”
输出:
4
一个可能的最长回文子序列为 “bbbb”。

示例 2:
输入:

“cbbd”
输出:

2
一个可能的最长回文子序列为 “bb”。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

从“最长”这个关键词可以推导出用动态规划算法。

状态定义

定义f[i][j]表示表示[i...j]子字符串最长回文子序列的长度。

状态转移方程

按照当前字符是否相等划分为两个类别:

  • s[i] == s[j]f[i][j] = f[i+1][j-1] + 2
  • s[i] != s[j]f[i][j] = max(f[i+1][j], f[i][j-1])

注意i左边比右边小,因此是从大到小遍历。f[i][i] = 1,表示初始状态,单个字符的最长回文子序列为1。

代码

class Solution:def longestPalindromeSubseq(self, s: str) -> int:# f[i][j]表示[i...j]字符串最长回文子序列的长度n = len(s)f = [[0] * n for _ in range(n)]# f[i][j] = f[i+1][j-1] + 2, s[i] == s[j]# f[i][j] = max(f[i+1][j], f[i][j-1]), s[i] != s[j]# i从大到小,j从小到大for i in range(n-1, -1, -1):f[i][i] = 1for j in range(i + 1, n):if s[i] == s[j]:f[i][j] = f[i+1][j-1] + 2else:f[i][j] = max(f[i+1][j], f[i][j-1])return f[0][n-1]

END.

Leetcode 516.最长回文子序列相关推荐

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

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

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

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

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

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

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

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

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

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

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

    截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...

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

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

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

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

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

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

最新文章

  1. 基于svnserve的SVN服务器(windows下安装与配置)
  2. Educational Codeforces Round 56 Editorial
  3. figure diagram illustrate exemplify profile
  4. 百度蜘蛛网站分两个服务器,SEOer需要将百度蜘蛛抓取时间降低到1秒以下
  5. Python zip函数 - Python零基础入门教程
  6. 场景7:带有Linux网桥的提供商网络
  7. Bailian4033 铺地毯【暴力】
  8. 借助CSS来管理js事件
  9. 数字电路课程设计---电子钟
  10. 用idea创建vue项目
  11. Vue 项目断网时跳转到网络错误页面
  12. 服务器代维护 云桥,Citrix
  13. Ubuntu VirtualBox虚拟机安装win7 win10全过程
  14. 【高等数学】无穷数级
  15. ECCV2018 | 论文阅读CornerNet: Detecting Objects as Paired Keypoints
  16. 【已解决】找不到某服务器 IP 地址
  17. thinkphp构架
  18. Absurdity and wonder: Heath Robinson at home
  19. linux压缩分区大小,linux如何无损调整分区大小的详细介绍
  20. 写一个轻量化的Google翻译脚本

热门文章

  1. python购物车代码_python简单商城购物车实例代码
  2. html全局事件,HTML5全局属性和事件
  3. vue click事件传参数_Vue框架之各种指令的使用
  4. zabbix 5.0所有依赖包_一杯茶的时间,上手Zabbix
  5. 高中计算机竞赛教案,信息技术教学案例评比——选择排序的算法实现(金华第一中学)...
  6. java工程师占比_25岁零基础转行学Java,他如今月入16k
  7. php调用jssdk转发_php一个文件搞定微信jssdk配置
  8. 变分自编码器(VAE)详解与实现(tensorflow2.x)
  9. ios8升级ios12教程_iOS Hello World示例教程
  10. java组合与继承始示例_Java 9功能与示例