Letcode:最长回文字符串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000
示例1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例2:
输入: “cbbd”
输出: “bb”
解题方法:
- 这是模仿网上大佬的方法,写出的代码。自己也没有完全吃透!!
class Solution:
def longestPalindrome(self, s):
n = len(s)
# 如果字符串长度小于2或者s等于它的倒序,则直接返回s
if len(s) < 2 or s == s[::-1]:
return s
# 定义起始索引和最大回文串长度,odd奇,even偶
start, maxlen = 0, 1
# 因为i=0的话必然是不可能会有超过maxlen情况出现,所以直接从1开始
for i in range(1, n):
# 取i及i前面的maxlen+2个字符
odd = s[i - maxlen - 1:i + 1] # len(odd)=maxlen+2
# 取i及i前面的maxlen+1个字符
even = s[i - maxlen:i + 1] # len(even)=maxlen+1
if i - maxlen - 1 >= 0 and odd == odd[::-1]:
start = i - maxlen - 1
maxlen += 2
continue
if i - maxlen >= 0 and even == even[::-1]:
start = i - maxlen
maxlen += 1
return s[start:start + maxlen]