最長回文子串 動態規劃

2021-10-09 13:59:09 字數 1033 閱讀 6429

vj原題

輸入乙個字串str,輸出str裡最長回文子串的長度。

回文串:指aba、abba、cccbccc、aaaa這種左右對稱的字串。

串的子串:乙個串的子串指此(字元)串中連續的一部分字元構成的子(字元)串

例如 abc 這個串的子串:空串、a、b、c、ab、bc、abc

input

輸入str(str的長度 <= 1000)

output

輸出最長回文子串的長度l。

sample input

daabaac

sample output

5使用動態規劃。如果str[i][j]是回文串,那麼dp[i][j]代表他的長度,否則等於0。

當i > j時,dp[i,j]= 0。

當i = j時,dp[i,j] = 1。

當i < j並且str[i] == str[j]時,dp[i][j] = dp[i+1][j-1]+2;

這裡初始化要注意,要初始化長度為1和長度為2的回文串。因為這個兩個長度的回文串生成方式和長度為3及以上的回文串生成方式不一樣。mark.

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace std;

string str;

const

int maxn =

1e3+10;

int dp[maxn]

[maxn]

;//如果str[i][j]是回文串,那麼dp[i][j]代表他的長度,否則等於0

intmain()

}for

(int i =

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

} cout << ans << endl;

return0;

}

加油吧!

動態規劃 最長回文子串

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

最長回文子串 動態規劃

給出乙個字串s,求s的最長回文子串的長度。樣例輸入 patzjujztaccbcc 輸出 9 尋找二維動態規劃表示式dp i j 如果直接用dp i j 表示子符串從s i 到s j 的最長回文子串長度無法得出遞推表示式。令dp i j 表示s i 至s j 所表示的子串是否是回文子串,是則為1,不...