【leedcode】0005. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
方法一:
def PalindromeMax(s): Max,res = 0,'' for i in range(len(s)): for j in range(i,len(s)): t = s[i:j+1] if t==t[::-1] and Max<j-i+1: Max,res = j-i+1,t return res ''' >>> a,b = 'babad','cbbd' >>> >>> PalindromeMax(a) 'bab' >>> PalindromeMax(b) 'bb' >>> '''
方法二: lambda表达式
Max = lambda s: max([(len(s[i:j]),s[i:j]) for i in range(len(s)) for j in range(i+1,len(s)+1) if s[i:j]==s[i:j][::-1]])[1] ''' >>> a='babad' >>> Max(a) 'bab' >>> >>> b='cbbd' >>> Max(b) 'bb' >>> '''
方法三:中心扩散法
def PalindromeMax(s): Max,res = 0,'' for i in range(len(s)): for j in range(2): L,R = i,i+j while L>=0 and R<len(s) and s[L]==s[R]: if Max<R-L+1: Max,res = R-L+1,s[L:R+1] L -= 1 R += 1 return res ''' >>> a,b = 'babad','cbbd','I am HannYang' >>> PalindromeMax(a) 'bab' >>> PalindromeMax(b) 'bb' >>> PalindromeMax(c) 'nn' >>> '''