国产探花免费观看_亚洲丰满少妇自慰呻吟_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]; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会宁县| 万载县| 郓城县| 聊城市| 东至县| 香河县| 沙河市| 五河县| 扎囊县| 唐河县| 岫岩| 芜湖市| 宁南县| 昭苏县| 靖远县| 社旗县| 纳雍县| 福清市| 九龙县| 璧山县| 黎川县| 和政县| 博客| 始兴县| 肇庆市| 肃北| 白城市| 安龙县| 伊宁市| 内黄县| 武穴市| 浦东新区| 彝良县| 嘉善县| 红桥区| 麻江县| 大荔县| 海丰县| 衡山县| 玛曲县| 巴彦淖尔市|