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