1. 程式人生 > 實用技巧 >【Leetcode刷題】迴文子串

【Leetcode刷題】迴文子串

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)

​ 沒有使用額外的空間