516. Longest Palindromic Subsequence
来源:互联网 发布:音序器软件中文版 编辑:程序博客网 时间:2024/05/18 01:12
题目
题意
求数组的回文子序列的最长长度
分析
用
转移方程如下
如果
如果
可以理解为每次头尾扩充1个位置, 即i, j为扩充的位置, 那么涉及的子串就包括
当
否则, 考虑只扩充i或只扩充j的子问题, 即
一开始我是将长度len作为外层循环, 然后里层循环是所有len的可能,代码如下
class Solution {public: int longestPalindromeSubseq(string s) { vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0)); for (int i = 0; i < s.size(); i++) dp[i][i] = 1; for (int len = 2; len <= s.size(); len++) { for (int left = 0; left <= s.size()-len; left++) { int right = left+len-1; int temp = max(dp[left][right-1], dp[left+1][right]); if (s[left] == s[right]) dp[left][right] = max(dp[left+1][right-1] + 2,temp); else dp[left][right] = max(dp[left+1][right-1], temp); } } return dp[0][s.size()-1]; }};
但是这个开销太大了(118 ms), 按这个思路分析,
要求
只需要知道蓝色区域的子问题结果, 所以将循环改成
- 外层为i从下往上
- 内层为j从左往右
代码如下:
class Solution {public: int longestPalindromeSubseq(string s) { vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0)); for (int i = s.size()-1; i >= 0; i--) { dp[i][i] = 1; for (int j = i+1; j < s.size(); j++) { if(s[i] == s[j]) dp[i][j] = dp[i+1][j-1]+2; else dp[i][j] = max(dp[i][j-1], dp[i+1][j]); } } return dp[0][s.size()-1]; }};
阅读全文
0 0
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- 516. Longest Palindromic Subsequence
- View的事件分发机制
- filter修改request参数
- Android 开发进阶路线
- 区块链简介
- C C++ 字符串分割
- 516. Longest Palindromic Subsequence
- 进程结构
- vi,vim 神器
- 99乘法表
- 解决VMware Pro 14安装Linux镜像时黑屏问题
- 1.4 对齐输出
- Hibernate之入门
- OpenWrt
- 光栅化的理解