【leetcode100】最长回文子串
1、题目描述
给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
2、初始思路
2.1 思路
暴力求解法,依次遍历每一个子串,并进行判断,时间复杂度很高,为O(n³)。
2.2 代码
class Solution:def longestPalindrome(self, s: str) -> str:if len(s) == 1:return sn = len(s)max_res = ""for i in range(n):for j in range(i,n):if s[i:j+1] == s[i:j+1][::-1]:res = s[i:j+1]if len(res) > len(max_res):max_res = resreturn max_res
2.3 缺点
3 优化算法
3.1 思路--中心扩展法
从中间字符进行左右遍历,这样,每个字符被遍历的次数为n,时间复杂度降低为O(n²)。
3.2 代码
class Solution:def longestPalindrome(self, s: str) -> str:n = len(s)start, end = 0, 0def center(left, right):while left >= 0 and right < n and s[left] == s[right]:left -= 1right += 1return left+1, right-1for i in range(n):l1, r1 = center(i, i)l2, r2 = center(i, i+1)if r1 - l1 > end - start:start, end = l1, r1if r2 - l2 > end - start:start, end = l2, r2return s[start:end+1]