python练习之最长回文子串
首先是一种非常非常简练的算法,但是时间复杂度有点高啊,空间复杂度貌似还ok?PS:数据结构方面还是差一点啊,得着重提高一下
class Solution:
def longestPalindrome(self, s: str) -> str:
if len(s) <= 1:
return s
max_s=s
for length in range(len(s),0,-1):
for i in range(0,len(s)-length+1):
max_s=s[i:i+length]
if max_s==max_s[::-1]:
#又是忘了两个等号,低级错误。。。
return max_s
下一步,中心扩散一下,省点时间嘛,毕竟是个对称的东西
class Solution:
res = ''
maxlen = 0
def longestPalindrome(self, s: str) -> str:
if len(s) <= 1:
return s
for i in range(len(s)):
self.compare(s,i,i)
self.compare(s,i,i+1)
return self.res
def compare(self, s, left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:
if right-left+1 > self.maxlen:
#必须要加上self啊
self.maxlen = right-left+1
self.res = s[left:right+1]
#试一试,maxlen和res的前面不加self行不行 并且,python不需要写end
left -= 1
right += 1