leetcode - 516. 最长回文子序列
516. 最长回文子序列
————————————————————————————————————————————
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
示例 1:
输入:
“bbbab”
输出:
4
一个可能的最长回文子序列为 “bbbb”。
示例 2:
输入:
“cbbd”
输出:
2
一个可能的最长回文子序列为 “bb”。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence
————————————————————————————————————————————
解题思路:
状态:
f[i][j] 表示 s 的第 i 个字符到第 j 个字符组成的子串中,最长的回文序列长度是多少。转移方程:
如果 s 的第 i 个字符和第 j 个字符相同的话
f[i][j] = f[i + 1][j - 1] + 2
如果 s 的第 i 个字符和第 j 个字符不同的话
f[i][j] = max(f[i + 1][j], f[i][j - 1])
然后注意遍历顺序,i 从最后一个字符开始往前遍历,j 从 i + 1 开始往后遍历,这样可以保证每个子问题都已经算好了。
初始化
f[i][i] = 1 单个字符的最长回文序列是 1
结果
f[0][n - 1]
作者:a380922457
链接:https://leetcode-cn.com/problems/two-sum/solution/dong-tai-gui-hua-si-yao-su-by-a380922457-3/
来源:力扣(LeetCode)
————————————————————————————————————————————
具体的C++代码如下所示:
class Solution {
public:int longestPalindromeSubseq(string s) {int length = s.size();vector<vector<int>> dp(length,vector<int>(length,0));for(int i=length-1;i>=0;i--){dp[i][i]=1;for(int j=i+1;j<length;j++){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][length-1];}
};
leetcode - 516. 最长回文子序列相关推荐
- Java实现 LeetCode 516 最长回文子序列
516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...
- LeetCode 516. 最长回文子序列(动态规划)
1. 题目 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "b ...
- Leetcode 516.最长回文子序列
Time: 20190906 Type: Medium 题目描述 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" ...
- 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 ...
最新文章
- Exchange2010配置实验(六)部署forefront到edge服务器
- 字符串按长度转换成数组
- python中常见的流程结构-【Python2】04、Python程序控制结构
- spring中是如何解析@Profile注解的
- *Codeforces587E. Duff as a Queen
- 单片机原理及其应用——单片机控制按键点亮发光二极管
- 如何在发文一小时后预测出公众号的阅读量?
- [C++11]decltype在泛型编程中的使用举例
- 微软笔试题(看到的写答案啊)
- 电脑java语言有什么用_Java语言是什么?_Java语言有什么优点
- 深度学习系列(一)【人类语言处理--引言】
- jQuery 学习笔记之十 (jQuery ajax )
- git刷新分支列表_如何使用Git小技巧让你开发协作过程更加顺利?
- java 获取已有字体,java获取本机所有可用字体
- 数据可视化|用雷达图进行对比分析
- editplus自动换行html,EditPlus如何自动换行
- 故宫景点功课4:太和殿院落下
- 前高管苏箐离职,原因或在于他的“杀人”言论同样对华为自身不利
- readmemh函数引用的txt格式_memory - 在Verilog中,我尝试使用$ readmemb来读取.txt文件,但它仅在内存中加载xxxxx(不必担心) - 堆栈内存溢出...
- 初识C语言——C语言的第一课