直接回答:最实用的解法是中心扩展:回文串一定关于某个中心对称,枚举所有中心(单字符中心和双字符间隙共 2n−1 个),从每个中心向两边扩展直到不再匹配,记录最长结果。时间 O(n²)、空间 O(1)。此外还有 O(n²) 的动态规划和理论最优 O(n) 的 Manacher 算法。

展开解析:中心扩展胜在好写好懂,注意中心分奇偶两类是主要易错点。DP 解法定义 f(i,j) 表示 s[i..j] 是否回文,转移 f(i,j) = s[i]==s[j] && f(i+1,j−1),要按区间长度从小到大填表,空间 O(n²) 可优化但不如中心扩展干净。Manacher 通过在每个字符间插入分隔符统一奇偶、并利用已有回文半径的对称性复用信息做到 O(n),面试中能讲清思想(右边界最远的回文覆盖提供下界)通常就够了。追问方向:回文子串计数(中心扩展稍加改动)、最长回文子序列(注意是子序列,另一道 DP)、回文划分问题。

示例

def longest_palindrome(s: str) -> str:
    def expand(l, r):
        while l >= 0 and r < len(s) and s[l] == s[r]:
            l, r = l - 1, r + 1
        return l + 1, r - 1
    start = end = 0
    for i in range(len(s)):
        for l, r in (expand(i, i), expand(i, i + 1)):
            if r - l > end - start:
                start, end = l, r
    return s[start:end + 1]