整数反转
今天是小安开始Leetcode刷题的第五题,正文开始ing?
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。题目原址
示例
【示例1】
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
【示例2】
输入: “cbbd”
输出: “bb”
【示例3】
输入: 120
输出:21
方法:中心扩展算法
思想
事实上,只需使用恒定的空间,我们就可以在
O
(
n
2
)
O(n^2)
O(n2) 的时间内解决这个问题。
我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有
2
n
−
1
2n-1
2n−1 个这样的中心。
你可能会问,为什么会是 2 n − 1 2n-1 2n−1 个,而不是 n 个中心?原因在于所含字母数为偶数的回文的中心可以处于两字母之间(例如 “abba” 的中心在两个 ‘b’ 之间)
代码实现
【python实现】
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if s==None or len(s)<1:
return ""
start = 0
end = 0
for i in range(len(s)):
len1 = self.expandAroundCenter(s,i,i)
len2 = self.expandAroundCenter(s,i,i+1)
lenmax = max(len1,len2)
if lenmax>end-start:
start = i-(lenmax-1)//2
end = i+lenmax//2
return s[start:end+1]
def expandAroundCenter(self,s,left,right):
L = left
R = right
while (L>=0 and R<len(s)) and s[L]==s[R]:
L = L-1
R+= 1
return R-L-1#最后值进行更改过