Leetcode 516.最长回文子序列
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.最长回文子序列相关推荐
- leetcode - 516. 最长回文子序列
516. 最长回文子序列 -------------------------------------------- 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 ...
- Java实现 LeetCode 516 最长回文子序列
516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...
- LeetCode 516. 最长回文子序列(动态规划)
1. 题目 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "b ...
- 120. Leetcode 516. 最长回文子序列 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j] 步骤二.推断状态方程: 如果当前的s[i] == s[j], ...
- LeetCode.516 最长回文子序列 详解
题目详情 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bb ...
- LeetCode 516. 最长回文子序列
截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...
- 【Leetcode】516. 最长回文子序列
516. 最长回文子序列 题目描述 解题思路:动态规划 题目描述 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度.子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任 ...
- 代码随想录补打卡 647 回文子串 516 最长回文子序列
647 回文子串 代码如下 func countSubstrings(s string) int { //dp[i][j]数组的含义是i-j这个范围的元素是否为回文串 dp := make([] ...
- 【Leetcode刷题Python】516. 最长回文子序列
1 题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度. 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列. 示例 1: 输入:s = &q ...
最新文章
- 基于svnserve的SVN服务器(windows下安装与配置)
- Educational Codeforces Round 56 Editorial
- figure diagram illustrate exemplify profile
- 百度蜘蛛网站分两个服务器,SEOer需要将百度蜘蛛抓取时间降低到1秒以下
- Python zip函数 - Python零基础入门教程
- 场景7:带有Linux网桥的提供商网络
- Bailian4033 铺地毯【暴力】
- 借助CSS来管理js事件
- 数字电路课程设计---电子钟
- 用idea创建vue项目
- Vue 项目断网时跳转到网络错误页面
- 服务器代维护 云桥,Citrix
- Ubuntu VirtualBox虚拟机安装win7 win10全过程
- 【高等数学】无穷数级
- ECCV2018 | 论文阅读CornerNet: Detecting Objects as Paired Keypoints
- 【已解决】找不到某服务器 IP 地址
- thinkphp构架
- Absurdity and wonder: Heath Robinson at home
- linux压缩分区大小,linux如何无损调整分区大小的详细介绍
- 写一个轻量化的Google翻译脚本
热门文章
- python购物车代码_python简单商城购物车实例代码
- html全局事件,HTML5全局属性和事件
- vue click事件传参数_Vue框架之各种指令的使用
- zabbix 5.0所有依赖包_一杯茶的时间,上手Zabbix
- 高中计算机竞赛教案,信息技术教学案例评比——选择排序的算法实现(金华第一中学)...
- java工程师占比_25岁零基础转行学Java,他如今月入16k
- php调用jssdk转发_php一个文件搞定微信jssdk配置
- 变分自编码器(VAE)详解与实现(tensorflow2.x)
- ios8升级ios12教程_iOS Hello World示例教程
- java组合与继承始示例_Java 9功能与示例