题目:
给定一个字符串 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]

本文介绍了两种查找字符串中最长回文子串的方法:递归和动态规划(DP)算法。通过实例演示了如何实现这两种算法,并对比了它们的时间复杂度。

被折叠的 条评论
为什么被折叠?



