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
这篇博客详细介绍了如何解决LeetCode上的第516题,即找到给定字符串中最长的回文子序列。作者提供了一个C++实现的动态规划算法,通过构建二维动态规划矩阵来计算最长回文子序列的长度。在执行过程中,算法以字符串长度为基准,逐步扩大子序列范围,检查字符是否相等以增加长度。最终返回的是最长回文子序列的长度。
429

被折叠的 条评论
为什么被折叠?



