【LeetCode-005】LongestParlingrome

1. 问题描述:

2. 解决办法:
 

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s) == 0 or len(s) == 1:
            return s

        s_parlindrome = ""
        for i in range(len(s)):
            # even = (i % 2)-1
            s_up = self.update_parlindrome(s, i, i)
            if len(s_up) > len(s_parlindrome):
                s_parlindrome = s_up
            s_up = self.update_parlindrome(s, i, i + 1)
            if len(s_up) > len(s_parlindrome):
                s_parlindrome = s_up
        return s_parlindrome

    def update_parlindrome(self, s, l, r):
        while l >= 0 and r < len(s) and s[l] == s[r]:
            l -= 1
            r += 1
        return s[l + 1: r]

    def longestPalindrome2(self, s):
        if len(s) == 0:
            return ""
        maxLen = 1
        start = 0
        for i in range(len(s)):
            if i - maxLen >= 1 and s[i - maxLen - 1:i + 1] == s[i - maxLen - 1:i + 1][::-1]:
                start = i - maxLen - 1
                maxLen += 2
                continue

            if i - maxLen >= 0 and s[i - maxLen:i + 1] == s[i - maxLen:i + 1][::-1]:
                start = i - maxLen
                maxLen += 1
        return s[start:start + maxLen]


s = Solution()
a = s.longestPalindrome("babad")
print(a)

3. 个人记录:
(1)两个方法都是参考其他人的,自己的方法两个暴力循环,花的时间太长了。
(2)对于方法1,比较容易没理解,从中心向两边扩,一一比较是不是相同,但需要注意的是需要分回文是奇数偶数的情况,还有返回时候注意s[a:b], b是不包含在内的;
(3)方法2的创新点在于:弄清楚新加入一个字符,原来的回文长度只可能+1(想了一下是只有全部回文字符相同的情况?)或者+2,新加入的字符和原来的原文的第一个字符的前一个相同;更新strat和max_length

猜你喜欢

转载自blog.csdn.net/zhangjipinggom/article/details/84933835
005