【Leetcode刷題】迴文子串
阿新 • • 發佈:2020-08-19
https://leetcode-cn.com/problems/palindromic-substrings/
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
時間複雜度:O(n2)
首先需要遍歷迴文中心,迴文中心可能是單個字元也可能是兩個字元,單個字元的迴文中心有n個,兩個字元的迴文中心最多有n-1個,因此最差情況需要遍歷2n-1個迴文中心,即O(2n-1)=O(n)
的時間複雜度。
而每個迴文中心最多可能向外擴充套件n次,因此最終的時間複雜度為O(n2)
空間複雜度:O(1)
沒有使用額外的空間