LeetCode

647. 回文子串

2019-03-17  本文已影响1人  cptn3m0

这道题目和求解最长回文子串的题目是一样的框架结构, 不同的地方在于这到题目统计的是总数.

class Solution(object):
    def countSubstrings(self, s):
        """
        :type s: str
        :rtype: int
        """
        
        # 这个题目和最长回文子串是一样的题目类型
        # 区别在于最长回文子串求解的最长的回文
        # 这套题目要求的是所有的回文子串的数目
        n = len(s)
        dp = [[False]*n for _ in range(n)]
        

        ret_count = 0
        # 初始化1, 对应于奇数
        for i in range(n):
            dp[i][i] = True
            # 统计长度为1的回文子串的数目
            ret_count +=1
            
        # 初始化2, 对应于偶数
        for i in range(1, n):
            if s[i-1] ==  s[i]:
                dp[i-1][i] = True
                # 统计长度为2的回文子串的数目
                ret_count+=1
        # 从 strlen == 3 开始递推
        for strlen in range(3,n+1):
            for i in range(0,n-strlen+1):
                j = i+strlen -1
                
                if s[i] ==s[j] and dp[i+1][j-1] == True:
                    dp[i][j] = True
                    # 统计长度从3开始的回文子串的数目
                    ret_count +=1
        
        return ret_count
上一篇下一篇

猜你喜欢

热点阅读