一、穷举法
class Solution:
def longestPalindrome(self, s: str) -> str:
max_len = 0
s_len = len(s)
if(s_len <= 1):
return s
for i in range(s_len):
for j in range(i,s_len):
s_1 = s[i:j+1]
if(len(s_1) >= max_len and isPalindromic(s_1)):
rs = s_1
max_len = len(s_1)
return rs
def isPalindromic(s_1:str) -> bool:
s_2 = s_1[::-1]
if(s_1 == s_2):
return True
return False
二、动态规划
class Solution:
def longestPalindrome(self, s: str) -> str:
s_len = len(s)
if(s_len == 0 or s_len == 1):
return s
p = [[0] * s_len for i in range(s_len)]
max_len = 0
for i in range(1,s_len+1):
for start in range(s_len):
end = i + start - 1
if end >= s_len:
break
if(i==1):
p[start][end] = True
max_s = s[start:end+1]
continue
if(i==2 and s[start]==s[end]):
p[start][end] = True
max_s = s[start:end+1]
continue
p[start][end]=(p[start+1][end-1] and s[start]==s[end])
if(p[start][end] and i > max_len):
max_s = s[start:end+1]
return max_s