[LeetCode]647. Palindromic Substrings

647. Palindromic Substrings

题意:判断一个字符串中存在的最大回文个数。

这里需要考虑到各种子字符串,所以我用了两个循环,外层处理动态规划,内层处理到当前的子串。

class Solution(object):
    def countSubstrings(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        res = 1
        def ispalindromic(strs):
            return strs == strs[::-1]
        for i in range(1, len(s)):
            cur = 1
            for j in range(i):
                if ispalindromic(s[j:i+1]):
                   cur += 1
            res += cur
        return res

参考网上的写法,意思是,将i看为区分字符串的中间点,分析字符串两边,在遍历的时候能存在多少个相等的值则说明有多少个回文,比如abbc,这里在b的位置的时候,在循环中会返回相等的个数,那就是回文的个数。

class Solution(object):
    def countSubstrings(self, s):
        """
        :type s: str
        :rtype: int
        """
        def helper(s1, s2):
            if len(s1) > len(s2):
                s1, s2 = s2, s1
            for i in range(len(s1)):
                if s1[i] != s2[i]:
                    return i
            return len(s1)
        ans = 0
        for i in range(len(s)):
            # 字符串是偶数
            ans += helper(s[:i][::-1], s[i:])
            # 字符串是奇数
            ans += helper(s[:i][::-1], s[i + 1:])
            # 自身
            ans += 1
        return ans
posted @ 2017-08-24 02:49  banananana  阅读(133)  评论(0编辑  收藏  举报