一共用了两种解法,暴力解和动态规划,学习到了动态规划思想。
1.暴力解
遍历字符串i(0,len)和(i,len),拿到所有子串,然后对每个子串检查是否首末字母相同,符合条件的字母放在一个L数组中。等待所有子串遍历和检查完毕后,对L数组的每一个元素遍历,将其中最长的元素输出。时间复杂度o(n3),空间复杂度o(n),附代码:
class Solution:
def longestPalindrome(self, s: str) -> str:
temp = ''
L = []
if len(s) == 1:
return s
for i in range(len(s)+1):
for j in range(i+1,len(s)+1):
a = s[i:j]
# print(a)
for k in range(len(a)):
if a[k] != a[len(a)-k-1]:
break
if k == len(a)-1:
L.append(a)
if len(L) == 1:
return L[0]
num = 0
for i,z in enumerate(L):
if i == 0:
l = len(L[0])
if len(L) == 1:
return L[0]
else:
if len(z)>l:
print(z)
l = len(z)
num = i
return L[num]
2.动态规划解法
看了教程总结下就是,高中数学里的方法,先约束条件再按条件逐渐缩小范围。明天早上再写。