开发小学生

导航

小练习3-最长回文字符串

解题思路
回文串:1个中心 + 左右等距扩散
回文中心:奇数长回文串1个中心字符,偶数长2个中心字符
中心数目:对于n长原始字符串s,一共有2n-1个回文中心
遍历2n-1个回文中心,确定中心后,check能否左右扩散
左右扩散:l>=0 and r<n and s[l]==s[r]
左右指针:l=i//2,r=i//2+i%2
扩散过程中通过maxl,max_len确定最长回文串的左端点和长度
结果返回:s[maxl:maxl+max_len]
时间:o(n^2)
空间:o(1)

def longestPalindrome(s):
maxl,max_len,n = 0,0,len(s)
for i in range(2*n-1):
l,r = i//2,i//2+i%2
while l>=0 and r < n and s[l]==s[r]:
if r-l+1>max_len: maxl,max_len = l,r-l+1
l-=1
r+=1
return s[maxl:maxl+max_len]

posted on 2021-11-15 17:47  开发小学生  阅读(34)  评论(0编辑  收藏  举报