給定乙個字串,你的任務是計算這個字串中有多少個回文子串。
具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。
示例 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 注意 ...