LeetCode-00005,20201013
题目:最长回文子串
给定一个字符串s
,找到s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
题目解析:回文?
百度百科说的这是人话?回文,就是顺序读取和逆序读取的结果是一样的。
当回文串长度为奇数时,比如“北京出租车租出京北”。
当回文串长度为偶数的时候,比如“1221”。
以上两种情况有一个共同的特点就是有一个中心,那在代码中如何表示中心呢?
解题:O(n)
class Solution:
def longestPalindrome(self, s: str) -> str:
if s is None:
return None
length = len(s)
if length <= 1 or s == s[::-1]:
return s
start = 0
max_length = 1
for i in range(1, length):
if i - max_length >= 0:
# 奇数情况,len(odd)=i+2
ood = s[i-max_length-1 : i+1]
# 偶数情况,len(even)=i+1
even = s[i-max_length: i+1]
if ood == ood[::-1] and i - max_length - 1 >= 0:
start = i - max_length - 1
max_length += 2
continue
if even == even[::-1] and i - max_length >= 0:
start = i - max_length
max_length += 1
continue
return s[start: start+max_length]
知识点:python输出list倒叙的三种方法
- 切片
- 列表的reverse方法对列表进行操作
# x.reverse()改变了原有序列表x
- reversed()函数没有改变了原有序列表,返回一个迭代器
继续加油~