LeetCode 「中等」5.最长回文子串

sankigan2025-2-21算法LeetCode

最长回文子串open in new window

题目描述

给你一个字符串 s,找到 s 中最长的回文子串。

示例

输入:s = "babad"
输出:"bab"

输入:s = "cbbd"
输出:"bb"

解答

中心扩展法

中心扩展法的思想是:以每个字符(单个字符或两个连续字符)为中心,向两边扩展,直到不再是回文为止。

实现步骤

  1. 遍历每个字符,将其作为中心
  2. 对于每个中心,分别扩展奇数长度和偶数长度的回文
  3. 记录最长的回文子串
Code
/**
 * @param {string} s
 * @return {string}
 */
var expandAroundCenter = function(s, lk, rk) {
  while (lk >= 0 && rk < s.length && s[lk] === s[rk]) {
    --lk;
    ++rk;
  }
  return [lk + 1, rk - 1];
};

var longestPalindrome = function(s) {
  let lp = '';

  for (let i = 0; i < s.length; ++i) {
    const [lk1, rk1] = expandAround(s, i, i);
    const [lk2, rk2] = expandAround(s, i, i + 1);

    const palindrome1 = s.slice(lk1, rk1 + 1);
    const palindrome2 = s.slice(lk2, rk2 + 1);

    if (palindrome1.length > lp.length) lp = palindrome1;
    if (palindrome2.length > lp.length) lp = palindrome2;
  }

  return lp;
}
更新于 2025/3/20 23:23:29