最長回文子串 動態規劃O N 2

2021-07-26 21:40:03 字數 652 閱讀 9277

分析:定義二維陣列dp[i,j]用以表示si…sj是回文(true)或不是回文(false)

定義dp陣列全為false;

第一次迴圈設定單個字元為回文子串 dp[i][i]=true;

第二次迴圈判斷相鄰兩個字元dp[i][i+1]是否為回文,若是則將回文子串的起始位置設為i,長度設為2;

第三次迴圈判斷長度len為3到s.length()長度的子串是否為回文,j=i+len-1,dp[i][j] = (dp[i+1][j-1] && si ==sj),若成立修改回文串的長度,若新的回文串長度大於原始長度,則修改回文子串的起始位置。

dp法的思路就是,首先判斷單個字元和兩個相鄰字元是否回文,然後檢測連續三個字元是否回文,然後四個直到整個字串是否為回文。

#include 

#include

using

namespace

std;

class solution

for(i=0; i1; i++)

}for(int len=3; len<=n; len++)

for(i=0; i1; i++)

}return s.substr(beg, maxlen);

}};int main()

2 動態規劃 最長回文子串

給定乙個字串s,找到s中最長的回文子串。可以假設s的最大長度為 1000 樣例 輸入 xabbbbbabbacd 輸出 abbbbba class solution return s.substr start,maxlen 此題的狀態轉移方程是 dp i j s i s j dp i 1 j 1 1...

動態規劃 最長回文子串

動態規劃 最長回文子串 題目描述 給出乙個字串s,求s的最長回文子串的長度 樣例 字串 patzjujztaccbcc 的最長回文子串為 atzjujzta 長度為9。動態規劃思想 令dp i j 表示s i 至s j 所表示的子串是否是回文子串,是則為1,不是為0。這樣根據s i 是否等於s j ...

動態規劃 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 本題有很多種解法,最簡單的暴力求解,但是會超時。下面分別說明動態規劃法和中心擴散法。解法一 動態規劃法...