国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

516. Longest Palindromic Subsequence

2019-11-08 02:55:42
字體:
來源:轉載
供稿:網友

516. Longest Palindromic Subsequence

題目要求 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[i][j] 來表示從 i 到 j 這一段子串中最長回文子串的長度,那么 dp[0][s.size() - 1] 就是我們最終想要的結果。

那么狀態轉移方程應該如何寫呢?給定一長度為 l 的字符串,我們想要判斷它是否包含回文子串,我們需要做的是:判斷 s[i]s[j] 是否相等。如果相等,那么就說明這兩個元素是在回文子串中的,那么這個子串的長度就變成了2 + dp[i + 1][j - 1]了,也就是前后兩個元素加上去掉這兩個元素剩下子串中最長回文子串的長度了。那么如果這兩個不相等呢?那么我們就需要檢查長度比它小 1 的子串了,一共有兩個——去頭的和去尾的,這兩個到時候選一個大的就行了。

所以,最終的狀態轉移方程是:

當 s[i] = s[j] 時,dp[i][j] = 2 + dp[i + 1][j - 1];否則,dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])。

代碼:

class Solution {public: int longestPalindromeSubseq(string s) { int len = s.length(); vector<vector<int>> dp(len, vector<int>(len)); for (int i = len - 1; i >= 0; i--) { dp[i][i] = 1; for (int j = i + 1; j < len; j++) { 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][len-1]; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏州市| 儋州市| 汶川县| 汤原县| 南宁市| 乐东| 自治县| 蓬莱市| 安多县| 宁夏| 常德市| 六安市| 安仁县| 辽中县| 淮安市| 海安县| 雅江县| 澄城县| 河南省| 浮山县| 潼南县| 林周县| 茶陵县| 丹巴县| 江川县| 衡阳市| 鹿邑县| 嘉鱼县| 宁武县| 右玉县| 哈密市| 墨江| 和田市| 嘉禾县| 昌图县| 白玉县| 揭西县| 金平| 屯留县| 平罗县| 吉隆县|