【题目】
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
【举例】
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
【题目翻译】
给定一个字符串s, 求这个字符串的最长镜像子串并返回。
【解题思路】
首先镜像子串分两类, 一类是奇数串, 一类是偶数串。
奇数串的中点可能是0——len(s)-1
偶数串的中点可能是0,1——len(s)-2, len(s)-1
我们可以遍历所有子串的中点,然后往两边扩展镜像子串, 并在扩展过程中记录下最长镜像子串的长度max_和起始位置j。
【实现代码】
class Solution:
j = 0
max_ = 0
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s) <= 1:
return s
#遍历所有镜像子串中心
for i in range(len(s)-1):
self.extendPalindrome(s, i, i)
self.extendPalindrome(s, i, i+1)
return s[self.j:self.j+self.max_]
def extendPalindrome(self, s, lo, hi):
#扩展子串
while lo >=0 and hi < len(s) and s[lo] == s[hi]:
lo -= 1
hi += 1
#更新最大值
if (hi - lo - 1) > self.max_:
self.j = lo + 1
self.max_ = hi - lo - 1