力扣 動態規劃 回文子串

2021-09-12 14:01:55 字數 1728 閱讀 7604

描述

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。

示例 1:

輸入: 「abc」

輸出: 3

解釋: 三個回文子串: 「a」, 「b」, 「c」.

示例 2:

輸入: 「aaa」

輸出: 6

說明: 6個回文子串: 「a」, 「a」, 「a」, 「aa」, 「aa」, 「aaa」.

注意:

輸入的字串長度不會超過1000。思想

這道題其實和之前的一道最長回文子串很類似,所以dp思想很簡單,這裡就不多說了。

另外忍不住吐槽一下c++,一定要注意在用c++有關長度的內建函式的時候,最好不要直接用,而是重新int乙個變數儲存

因為大部分有關長度的內建函式型別是unsigned,如果直接用有關長度的內建函式直接進行運算 有時候會出現一些意想不到的錯誤

python code

class

solution

:def

countsubstrings

(self, s:

str)

->

int:

dp =[[

0for i in

range

(len

(s))

]for i in

range

(len

(s))

]# 初始化dp陣列

for i in

range

(len

(s))

: dp[i]

[i]=

1# 初始化字串長度為1的

for i in

range

(len

(s)-1)

:# 初始化長度為2的

if s[i]

== s[i +1]

: dp[i]

[i +1]

=1k =

2for i in

range

(len

(s)-2)

:for j in

range

(len

(s)- k)

:if s[j]

== s[j + k]

and dp[j +1]

[j + k -1]

: dp[j]

[j + k]=1

k +=

1 sum =

0for temp in dp:

sum +=

sum(temp)

return sum

c++ code
class solution 

int sum =0;

for(vector<

int> temp: dp)

for(

int figure: temp)

sum +

= figure;

return sum;}}

;

動態規劃 回文子串的長度

給定乙個字串,求其最長的回文子串的長度。如字串 abcdcba 的最長回文子串長度為7,而 aebfcgdhcibja 的最長回文也是 abcdcba 長度也是7.分析 典型的動態規劃問題,用dp i j 記錄字串中從字元 i 到字元 j 中最長回文子串的長度,則 if s.charat i s.c...

力扣 動態規劃

設爬x層的梯子的方法有f x 種,那麼f x f x 1 f x 2 爬1層梯子的方式有一種 爬2層梯子的方式有兩種 爬3層梯子的方式有三種 爬4層梯子的方式有五種 classsolution int rev newint n 1 rev 0 0 rev 1 1 rev 2 2 for inti 3...

動態規劃 回文子串行個數

description 給定乙個字串行,求這個序列中回文子串行的個數。包含多組用例,每個用例為一行字串行 只含有字母和數字,不包含空格,字串長度小於100 輸出該字串行中回文子串行的個數。aaaa aaba 15 10 對於樣例2,有如下回文子串行 為便於觀察,我們另字串行為a1 a2 b a3 a...