力扣最长回文子串
要求
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
思路1
1.将所有可能的的最短循环的遍历去判断是否为回文
2.将是回文的存入字典,然后取出最大的长度的那个字符串
代码片
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s)==0:
return ""
if len(s)==1:
return s[0]
def huiwen(x):
return x==x[::-1]
d=dict()
# d=[]
l=len(s)
for i in range(len(s)):
for j in range(i+1,len(s)):
if huiwen(s[i:j+1]) :
d[j+1-i]=s[i:j+1]
else: d[1]=s[-1]
max1=0
for k in d:
if max1<k:
max1=k
return d[max1]
思路2
分奇偶找出最大长度的回文串
代码片
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
n = len(s)
maxl = 0
start = 0
for i in range(n):
if i-maxl-1>=0 and s[i-maxl-1:i+1] == s[i-maxl-1:i+1][::-1]:
start = i - maxl - 1
maxl += 2
if i-maxl >=0 and s[i-maxl:i+1]==s[i-maxl:i+1][::-1]:
start = i - maxl
maxl += 1
return s[start: start + maxl]