leetcode 516. Longest Palindromic Subsequence 最长回文子序列 + DP动态规划

来源:互联网 发布:免费网络加速器 编辑:程序博客网 时间:2024/05/22 06:59

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
One possible longest palindromic subsequence is “bb”.

题意很简单,直接DP动态规划

建议和这一道题一起学习leetcode 5. Longest Palindromic Substring 最长回文子串的查找 + 按照length做DP 和leetcode 730. Count Different Palindromic Subsequences 动态规划DP,leetcode 647. Palindromic Substrings 回文子串的数量

dp[i][j]表示字符串i~j下标所构成的子串中最长回文子串的长度~最后我们需要返回的是dp[0][len-1]的值

代码如下:

#include <iostream>#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <climits>#include <algorithm>#include <sstream>#include <functional>#include <bitset>#include <numeric>#include <cmath>using namespace std;class Solution{public:    int longestPalindromeSubseq(string s)    {        vector<vector<int>> dp(s.length(), vector<int>(s.length(), 0));        for (int i = 0; i < s.length(); i++)            dp[i][i] = 1;        for (int len = 1; len <= s.length(); len++)        {            for (int i = 0; i + len < s.length(); i++)            {                int j = i + len;                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][s.length() - 1];    }};
阅读全文
0 0
原创粉丝点击