最長回文子串 動態規劃

2021-10-07 09:07:13 字數 898 閱讀 9561

給出乙個字串s,求s的最長回文子串的長度。

樣例輸入:patzjujztaccbcc

輸出:9

尋找二維動態規劃表示式dp[i][j],如果直接用dp[i][j]表示子符串從s[i]到s[j]的最長回文子串長度無法得出遞推表示式。

令dp[i][j]表示s[i]至s[j]所表示的子串是否是回文子串,是則為1,不是為0;

if

(s[i]

==s[j]

) dp[i]

[j]=sp[i-1]

[j-1];

if(s[i]

!=s[j]

) dp[i]

[j]=

0;

#include

#include

#include

#include

using

namespace std;

int len;

int dp[

100]

[100];

///表示從s[i]到是s[j]的子串是否是回文串:是1,否0

intmain()

for(

int i=

0;i1;i++

)///if(s[i]==s[j]) dp[i][j]=dp[i+1][j-1];//可以看出無法逐行計算

///計算dp[i][j]需要知道dp[i+1][j-1],即每個元素左下方的元素結果。

///因此可以從對角線依次向上斜著計算

///根據遞推表示式從邊界出發,可以每次子串長度加1

for(

int l=

3;l<=len;l++)}

} cout

}

動態規劃 最長回文子串

動態規劃 最長回文子串 題目描述 給出乙個字串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 本題有很多種解法,最簡單的暴力求解,但是會超時。下面分別說明動態規劃法和中心擴散法。解法一 動態規劃法...

最長回文子串 動態規劃

vj原題 輸入乙個字串str,輸出str裡最長回文子串的長度。回文串 指aba abba cccbccc aaaa這種左右對稱的字串。串的子串 乙個串的子串指此 字元 串中連續的一部分字元構成的子 字元 串 例如 abc 這個串的子串 空串 a b c ab bc abc input 輸入str s...