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

   日期:2020-05-17     浏览:100    评论:0    
核心提示:1. 题目给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。示例 1:输入:bbbab输出:4一个可能的最长回文子序列为 bbbb。示例 2:输入:cbbd输出:2一个可能的最长回文子序列为 bb。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。数据结构与算法

1. 题目

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

示例 1:
输入:
"bbbab"
输出:
4
一个可能的最长回文子序列为 "bbbb"。

示例 2:
输入:
"cbbd"
输出:
2
一个可能的最长回文子序列为 "bb"

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

2. 解题

类似题目:
LeetCode 5. 最长回文子串(动态规划)
LeetCode 647. 回文子串(DP)

注意,子序列,可以隔着字符

class Solution {
public:
    int longestPalindromeSubseq(string s) {
    	int i, j, n = s.size();
    	vector<vector<int>> dp(n,vector<int>(n,0));
        for(i = 0; i < n; ++i)
            dp[i][i] = 1;
    	for(j = 0; j < n; ++j)
    	{
    		for(i = j-1; i >= 0; --i)//区间从小往大,所以逆序
    		{
    			if(s[i] == s[j])
    				dp[i][j] = dp[i+1][j-1]+2;
    			else
    				dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
    		}
    	}
    	return dp[0][n-1];
    }
};

176 ms 67.1 MB

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服