本文为打卡刷Leetcode题系列文章, 这个系列文章的目录都是按照如下四个部分构成
- 题目链接
- 题目描述
- 代码初步
这部分写的是我在刷题过程中的思路,相信在拿到题目就立马参考大神们的思路写代码是不会有进步的,我思故我在,思考让我进步!! - 代码欣赏
这一部分po出优秀的解题答案,这里我们可以学习大神们的解题思路,进而内化成自己的。
题目链接
https://leetcode-cn.com/problems/longest-palindromic-substring/submissions/
题目描述
代码初步
说说自己的思路,因为回文串是中心对称的,所以可以采用中心对称向两边扩散的方法。
具体算法步骤如下:
首先寻找中心点,这个中心点又分为两种情况:
第一:字符串个数为奇数的时候,中心点只有一个,但是这个中心点可能是N位字符串中的任意一个
第二:字符串个数为偶数的时候,中心点有两个,假设字符串位数为N,那么中心点有N-1种情况
循环遍历中心点,分别计较中心点为1个的时候和中心点为2个的时候的回文串长度,取max
最后,不断更新最长的回文字符串长度
时间复杂度为O(n^2)
class Solution:
def longestPalindrome(self, s: str) -> str:
if s is None or len(s) < 1:
return ''
# n个中心或者n+1个中心
start, end = 0,0
for i in range(0, len(s)):
len1 = self.expandCenter(s, i, i)
len2 = self.expandCenter(s, i, i+1)
length = max(len1, len2)
if length> (end - start):
start = i - (length - 1)//2
end = i + length//2
return s[start:end+1]
def expandCenter(self, s: str, l: int, r: int):
while (l>=0 and r< len(s) and (s[l]== s[r])):
l -= 1
r += 1
return r - l - 1
代码欣赏
该题的动态规划解法正在努力研究中。。。。。