解题思路-leetcode第五题:最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
本题采用中心扩展法,寻找每一个字符或每一对字符能扩展的最大回文子串,并记录长度与起始坐标。循环遍历字符串,得到最大回文子串。首先定义扩展函数expand(l,r),通过扩展函数,找到每一个字符或每一对字符的最大回文子串。然后是代码主体部分,先排除特殊情况,字符串为空或字符串长度为1时,返回该字符串。然后循环遍历字符串,len1为每个字符的最大回文子串,len2为每一对字符的最大回文子串,取len1和len2的最大值,若该值大于上一次循环的最大值,则更新起始位置,最后返回与起始位置对应的字符串。代码如下:
class Solution:
def longestPalindrome(self, s: str) -> str:
def expand(l,r):
while(0<=l and r<n and s[l]==s[r]):
l-=1
r+=1
return r-l-1
if(not s or len(s)==1):
return s
n=len(s)
start=0
end=0
for i in range(n):
len1=expand(i,i)
len2=expand(i,i+1)
len_long=max(len1,len2)
if(len_long>end-start):
start=i-(len_long-1)//2 #//表示整除
end=i+(len_long)//2
return s[start:end+1]
提交后,通过。