5. 最长回文子串

5. 最长回文子串

思路

找回文串的难点在于,回文串的的长度可能是奇数也可能是偶数,解决该问题的核心是从中心向两端扩散的双指针技巧

如果回文串的长度为奇数,则它有一个中心字符;如果回文串的长度为偶数,则可以认为它有两个中心字符。

之前的左右指针都是从两端向中间相向而行,而回文子串问题则是让左右指针从中心向两端扩展。

代码

Python

class Solution:
    def longestPalindrome(self, s: str) -> str:
        res = ""
        for i in range(len(s)):
            # 以 s[i] 为中心的最长回文子串(最长回文子串长度为奇数)
            s1 = self.palindrome(s, i, i)
            # 以 s[i] 和 s[i+1] 为中心的最长回文子串(最长回文子串长度为偶数)
            s2 = self.palidrome(s, i, i + 1)
            # res = longest(res, s1, s2)
            res = res if len(res) > len(s1) else s1
            res = res if len(res) > len(s2) else s2
        return res
    
    def palidrome(self, s: str, l: int, r: int) -> str:
        # 防止索引越界
        while l >= 0 and r < len(s) and s[l] == s[r]:
            # 向两边展开
            l -= 1
            r += 1

        # 此时 s[l + 1 ~ r - 1] 就是最长回文串
        # Python 的字符串切片是左闭右开区间 [start, end)
        return s[l + 1: r]
posted @ 2026-07-27 15:45  wyzsgy  阅读(3)  评论(0)    收藏  举报