首先第一點需要明確動態規劃的狀態轉移方程:
dp[i][j] 含義為 陣列中下標 i 到 下標 j 是否為回文串,若為回文串dp[i][j]=1 ,若不為回文串dp[i][j]=0
(1)dp[i][i]=1; //邊界1當處於單字母時候 ,本身必為回文串
(2)dp[i][i+1]=1 ( s[i]==s[i+1]) //邊界2當處於雙字母時候,左右相等則為回文字串
(3) dp[i][j]=1 (s[i]==s[j]&&dp[i+1][j-1]) //正常的區域判斷條件
第一層的迴圈為字串的個數 l 由 1 至 s.length()
內層迴圈為子串的起始點,結束條件為起始點加字串長度越界
第一層時候直接將第乙個邊界情況dp[i][i] 完成
第二層時候直接將第二個邊界情況dp[i][i+1]完成
其他情形將大問題轉移為小問題利用dp陣列求解
每局利用dp[i][j]的狀態和長度來判斷是否 超過最長串,若串長超過則更新。
class solution
else if (longe == 2)
else
if (dp[i][j] && longe > ans.size()) }}
return ans;
}};
LeetCode5 最長回文串
include include include include include include using namespace std ifndef solution h define solution h 思路 從回文串的對稱點開始,依次向左向右比較,不相同的時候停止遍歷,直到找出最大的長度的回文...
LeetCode 5 最長回文串
目錄 1.題目描述 2.解決方案 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 方法一 動態規劃 演算法 用二位陣列來標記字串從下標 i 到下標 j 是否為回...
Leetcode 5 最長回文串
解題思想 1.中心擴充套件法 從字串中心分別往左右兩端移動,while l 0 r易混點 回文串的起始值 i 迴圈中回文串的長度 1 2 看不懂找數帶入即可 class solution def longestpalindrome self,s str str n len s defgetlen l...