Leetcode刷題 回文子串

2022-05-12 20:30:10 字數 874 閱讀 5682

class solution(object):

def countsubstrings(self, s):

""":type s: str

:rtype: int

"""# 遍歷s,將每個位置的字元當做回文中心擴散

n = len(s)

# 乙個字元也算是回文,所以開局count就是s中字元的數量

count = n

for i in range(n):

# 如果有兩個相同的字元,那麼將這兩個相同字元作為回文中心擴散

if i+1 < n and s[i+1] == s[i]:

count += 1

left, right = i-1, i+2

while left >= 0 and right < n and s[left] == s[right]:

count += 1

left -= 1

right += 1

# 以當前字元作為回文中心開始擴散

left, right = i-1, i+1

while left >= 0 and right < n and s[left] == s[right]:

count += 1

left -= 1

right += 1

return count

​ 首先需要遍歷回文中心,回文中心可能是單個字元也可能是兩個字元,單個字元的回文中心有n個,兩個字元的回文中心最多有n-1個,因此最差情況需要遍歷2n-1個回文中心,即o(2n-1)=o(n)的時間複雜度。

​ 而每個回文中心最多可能向外擴充套件n次,因此最終的時間複雜度為o(n2)

​ 沒有使用額外的空間

leetcode刷題 最長回文子串

看了一下題解,還有很多種方法,比如動態規劃,但是看了乙個下午也沒看太懂。所以就先把暴力破解弄懂吧。我這個菜雞,還要多多努力啊。主要問題在,不知道怎麼列舉字串的所有子串,題解中使用的是雙指標辦法,固定左指標,右指標移動得到全部的子串。最後,進行回文字串的驗證時,也是採用的雙指標方法來進行驗證。因此雙指...

leetcode刷題(43) 647 回文子串

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

leetcode刷題 125 驗證回文串

給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false 思路 先用replaceall ...