[Leetcode] Longest Palindromic Subsequence
Longest Palindromic Subsequence 题解
题目来源:https://leetcode.com/problems/longest-palindromic-subsequence/description/
Description
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the maximum length of s is 1000.
Example 1:
Input:
"bbbab"
Output:
4
One possible longest palindromic subsequence is "bbbb".
Example 2:
Input:
"cbbd"
Output:
2
Solution
class Solution {
public:
int longestPalindromeSubseq(string str) {
int n = str.length(), high, low;
vector<vector<int>> dp(n, vector<int>(n, 0));
for (high = 0; high < n; high++) {
dp[high][high] = 1;
for (low = high - 1; low >= 0; low--) {
if (str[low] != str[high])
dp[high][low] = max(dp[high][low + 1], dp[high - 1][low]);
else
dp[high][low] = dp[high - 1][low + 1] + 2;
}
}
return dp[n - 1][0];
}
};
解题描述
这道题是经典的求字符串中最长回文子序列的长度的问题。采用的办法是动态规划:
- 对一个字符串,如果头尾的字符不同,该字符串的最长回文子序列的长度就是去掉头字符的的子串的最长回文子序列的长度和去掉尾字符的的子串的最长回文子序列的长度二者中较大值
- 如果头尾的字符相同,该字符串的最长回文子序列的长度就是去掉头尾字符的的子串的最长回文子序列的长度+2
上面的解法中,按理论来说dp第一个下标可以是low,但是如果将high和low对调的话较为符合局部性原理,数据可以更多地在cache中读取,减少了访问内存的次数,因此速度较快(实际在LeetCode上的测试结果也是如此)。
拓展
如果问题改成求一个字符串的回文子序列数目(或者将一个字符串去掉某些字符以获得一个回文字符串的方案数)的话,同样可以使用动态规划的办法,状态转移上面也是针对头尾字符是否相同进行区分:
- 如果头尾字符不同,字符串的回文子序列数目 = 去掉头字符后字符串的回文子序列数目 + 去掉尾字符后字符串的回文子序列数目 - 去掉头尾字符后字符串的回文子序列数目
- 如果头尾字符相同,字符串的回文子序列数目 = 上一情况的结果 + 去掉头尾字符后字符串的回文子序列数目 + 1 = 去掉头字符后字符串的回文子序列数目 + 去掉尾字符后字符串的回文子序列数目 + 1
[Leetcode] Longest Palindromic Subsequence的更多相关文章
- [LeetCode] Longest Palindromic Subsequence 最长回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- LeetCode——Longest Palindromic Subsequence
1. Question Given a string s, find the longest palindromic subsequence's length in s. You may assume ...
- [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- 【LeetCode】516. Longest Palindromic Subsequence 最长回文子序列
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 刷题心得 日期 题目地址:https://le ...
- LN : leetcode 516 Longest Palindromic Subsequence
lc 516 Longest Palindromic Subsequence 516 Longest Palindromic Subsequence Given a string s, find th ...
- [leetcode]516. Longest Palindromic Subsequence最大回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- [LeetCode] Longest Palindromic Substring 最长回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- [Swift]LeetCode516. 最长回文子序列 | Longest Palindromic Subsequence
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- 516. Longest Palindromic Subsequence最长的不连续回文串的长度
[抄题]: Given a string s, find the longest palindromic subsequence's length in s. You may assume that ...
随机推荐
- HDU4678_Mine
很有意思,很好的题目. 这样的,一个n*m的扫雷地图,告诉你哪些地方是有雷的.一个人如果点在了空白处,那么与其相邻的(八个方向)的数字以及空白都会递归地显示出来,如果点在数字上面,那么就只会显示这一个 ...
- 基本数据类型用 == 判断的是值 ,对象用 == 判断的是地址 , 判断值的话用 equals()
基本数据类型用 == 判断的是值 ,对象用 == 判断的是地址 , 判断值的话用 equals() 字符串是String的实例
- Streaming Big Data: Storm, Spark and Samza--转载
原文地址:http://www.javacodegeeks.com/2015/02/streaming-big-data-storm-spark-samza.html There are a numb ...
- ICPCCamp 2017 I Coprime Queries
给出一个长度为\(n\)的正整数序列\(a\),\(m\)次询问\(l,r,x\),问\(max\{i|i\in[l,r],gcd(a_i,x)=1\}\). \(n,m,a_i\le 10^5\). ...
- click()、bind()、live()和delegate()方法
我之前使用click()比较多,又来因为网页内容需要前端生成用了live().有的时候使用click()和bind()分不清楚该怎么试用.查了很多资料.测试了很多次,自己明白了. 总结如下:代码注释很 ...
- P2610 [ZJOI2012]旅游
题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出 ...
- [BZOJ1588][HNOI2002]营业额统计 无旋Treap
[HNOI2002]营业额统计 时间限制: 5 Sec 内存限制: 162 MB 题目描述 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以 ...
- 【刷题】BZOJ 1453 [Wc]Dface双面棋盘
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方 ...
- HTML option 标签的 selected 属性
HTML option 标签的 selected 属性 http://www.w3school.com.cn/tags/att_option_selected.asp 1.一般做WEB的时候,Chro ...
- LINUX内核分析第四周——扒开系统调用的三层皮
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...