LeetCode-516. 最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
输入:s = “bbbab”
输出:4
解释:一个可能的最长回文子序列为 “bbbb” 。
class Solution {
public:
int longestPalindromeSubseq(string s) {
int n = s.size();
if(n == 0)return 0;
vector<vector<int>> v(n,vector<int>(n));
int i,j,k;//i---j的最长回文子串的长度,k为遍历长度
vector<int> par(n);
for(i=0;i<n;i++){
v[i][i] = 1;
}
for(i=0;i<n-1;i++){
v[i][i+1] = 1;
if(s[i] == s[i+1]){
v[i][i+1] = 2;
}
}
for(k=3;k<=n;k++){//根据长度遍历
for(i=0;i<=n-k;i++){
j = i+k-1;
v[i][j] = max(v[i+1][j],v[i][j-1]);
if(s[i] == s[j]){
v[i][j] = max(v[i][j],v[i+1][j-1]+2);
}
}
}
return v[0][n-1];
}
};
执行结果:
通过
执行用时:
180 ms, 在所有 C++ 提交中击败了7.08%的用户
内存消耗:
71.1 MB, 在所有 C++ 提交中击败了80.77%的用户
通过测试用例:
86 / 86