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];
}
};