#################################################
超时的暴力破解法
设置dp为验证矩阵判断,dp[j][j+i]表示序列的i到j是否为回文序列
参考了他人的解法代码:回文序列判断条件:
1.字符串s[j] = s[i+j] 即 dp[j][j+i]=1
2.回文序列的内部也是回文序列即dp[j+1][i+j-1]=1
#################################################
#超时暴力破解代码
class Solution:
def longestPalindrome(self, s: str) -> str:
string = s
s_return = ""
len_max = 0
for i in range(len(s)-1):
head = s[i]
for j in range(i+1,len(s)):
if s[j] ==head:
s_rev = [p for p in reversed(s[i:j+1])]
if list(s[i:j+1]) == s_rev:
if len(s[i:j+1])>len_max:
len_max = len(s[i:j+1])
s_return = s[i:j+1]
else:
continue
if len_max!=0:
return s_return
elif s=="":
return s
else:
return s[0]
#参考的代码:
class Solution:
def longestPalindrome(self, s: str) -> str:
length = len(s)
dp = [[0] * length for _ in range(length)]
left, right = 0, 0
#i象征步长j指示初始位置
for i in range(1, length):
for j in range(length-i):
#关键:j+1 >= j+i-1 表示将长度为2或者为3的首尾相同字母的串设置为回文序列
if s[j] == s[j+i] and (j+1 >= j+i-1 or dp[j+1][j+i-1]):
dp[j][j+i] = 1
left, right = j, j+i
return s[left: right+1]