最长回文子串

# 题目

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

# 示例

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

# 题解

# 思路

利用中心扩展的方式,遍历字符串,尝试将每个字符作为回文的中心进行计算。

注意:回文的中心可以是 1 个,也可以是 2 个。

# 代码实现

function longestPalindrome (s) {
  let start = 0
  let end = 0
  for (let i = 0; i < s.length; i++) {
    const len1 = expand(s, i, i)
    const len2 = expand(s, i, i + 1)
    const len = Math.max(len1, len2)
    if (end - start + 1 < len) {
      start = i - parseInt((len - 1) / 2)
      end = i + Math.ceil((len - 1) / 2)
    }
  }
  return s.substring(start, end + 1)
}

function expand (s, start, end) {
  while (start >= 0 && end < s.length && s[start] && s[end] && s[start] === s[end]) {
    start--
    end++
  }
  return end - start - 1
}