leetcode 647 回文子串

2021-10-09 11:34:56 字數 1053 閱讀 5749

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

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

示例 1:

輸入:"abc"

輸出:3

解釋:三個回文子串: "a", "b", "c"

示例 2:

輸入:"aaa"

輸出:6

解釋:6個回文子串: "a", "a", "a", "aa", "aa", "aaa"

class solution(object):

def countsubstrings(self, s):

""":type s: str

:rtype: int

"""res = 0

for i in range(len(s)):

left = right = i

while left >= 0 and right < len(s) and s[left] == s[right]:

res += 1

left -= 1

right += 1

if i+1 < len(s):

if s[i] == s[i+1]:

left, right = i, i+1

while left >= 0 and right < len(s) and s[left] == s[right]:

res += 1

left -= 1

right += 1

return res

在考慮回文的時候可以從兩個角度入手,一種是從兩邊往內進行比較,另一種是從中心開始向外擴散。那麼中心可能有兩種情況,一種是中心只有乙個點,另一種是中心有兩個點,且兩個點的值相同。所以只需要一遍的遍歷就可以找到所有的中心。

本題也可以使用動態規劃來做,我們可以用dp[left][right]來表示以left為起點,right為終點的字串是否為回文。那麼判斷它是否為回文只需要兩端的字元一樣,且dp[left-1][right+1]也是回文即可。這樣我們就構建了乙個二維的動態陣列用來儲存回文資訊,減少了重複的運算。

leetcode647 回文子串

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例 輸入 aaaba 輸出 9 解釋 a aa a aa aaa a b aba a 奇回文 如 aba 和偶回文 如abba 歸一化處理 i 0123 47s...

leetcode 647 回文子串

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例 1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 說明 6個回文子串 a a a aa aa aaa 注意 輸入...

LeetCode 647 回文子串

題目鏈結 題目描述 給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例輸入 abc 輸出 3 解釋 三個回文子串 a b c 輸入 aaa 輸出 6 說明 6個回文子串 a a a aa aa aaa 注意 ...