給出乙個字串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...