Smiling & Weeping
----你站在桥上看风景,
看风景的人在楼上看你。
明月装饰了你的窗子,
你装饰了别人的梦。
题目:
给你一个字符串 s
,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
题目链接:516. 最长回文子序列 - 力扣(LeetCode)
思路:思路是区间DP,最长回文子序列,若s[i]==s[j] -> dp[i][j] = dp[i+1][j-1]+2,之后就是套路整理:
Talk is cheap , show me the code
1 class Solution { 2 public: 3 int longestPalindromeSubseq(string s) { 4 int n = s.length(); 5 const int inf = 1000000000; 6 vector<vector<int>> dp; 7 dp.resize(n+10); 8 for(int i = 1; i <= n; i++) 9 dp[i].resize(n+10); 10 for(int i = 1; i <= n; i++) dp[i][i] = 1; 11 for(int len =2; len <= n; len++) 12 for(int i = 1; i <= n-len+1; i++) 13 { 14 int j = i+len-1; 15 if(s[i-1] == s[j-1]){ 16 dp[i][j] = max(dp[i+1][j-1]+2 , dp[i][j]); 17 } 18 else 19 dp[i][j] = max(dp[i+1][j] , dp[i][j-1]); 20 } 21 return dp[1][n]; 22 } 23 };
云朵是汽做的山岚,
山岚是是做的云朵,
时光梦境中的一个幻象。
--在梦中忽然觉得困倦极了,于是便醒了过来。
标签:字符,int,序列,DP,区间,dp,回文 From: https://www.cnblogs.com/smiling-weeping-zhr/p/17614492.html