题目:
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
第一种解法:递归,时间复杂度较高
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s) <=1:
return s
for length in range(len(s),0,-1):
for j in range(0,len(s)-length+1):
hui_x=s[j:j+length]
if hui_x == hui_x[::-1]:
return hui_x
第二种解法:DP算法,时间复杂度较低
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
length=len(s)
if length<1:
return s
max_len=0
dp=[[False]*length]*length
for i in range(length):
for j in range(i+1):
if(s[i]==s[j]):
if(i-j<2):
dp[i][j]=True
else:
dp[i][j]=dp[i-1][j+1]
else:
dp[i][j]=False
if dp[i][j] and max_len<i-j+1:
max_len=i-j+1
start=j
return s[start:start +max_len]