题目:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
解法一:暴力穷举,超时啦
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
leng = len(s)
if(leng<=1):
return s
i = 0
result = []
while(i<leng):
for right in range(i,leng+1):
str1 = s[i:right]
list1 = list(str1)
list1.reverse()
str2 = "".join(list1)
if (str1 == str2):
result.append(str1)
i +=1
temp = 0
for i in range(len(result)):
if(len(result[i])>temp):
flag = i
temp = len(result[i])
return result[flag]
解法二:假设这是个回文字串,那么如果周边两个值都相等,那么也是回文字串
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
leng = len(s)
if(leng<=1):
return s
result = ""
for i in range(leng):
flag = self.longestsub(s,i,i)
if (len(flag)>len(result)):
result = flag
flag = self.longestsub(s,i,i+1)
if (len(flag)>len(result)):
result = flag
return result
def longestsub(self,s,left,right):
"""
:type s :str
:type left,right:int
:rtype:str
"""
while(left >=0 and right<len(s) and s[left]==s[right]):
left -=1
right +=1
return s[left+1:right]