您的位置:首页 > 产品设计 > UI/UE

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

2017-12-16 15:10 429 查看
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做DPleetcode 730. Count Different Palindromic Subsequences 动态规划DPleetcode 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];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: