最长回文子串

44 阅读1分钟
/*
 * @lc app=leetcode.cn id=5 lang=javascript
 *
 * [5] 最长回文子串
 */

// @lc code=start
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
  // 判断是不是小于2,小于就直接返回原来的字符串
  if (s.length < 2) {
    return s
  }
  // 假如ab,长度刚好=2,最大的回文字符串长度就是1
  let start = 0,
    maxLength = 1
  // 遍历,两种情况
  // 1.bab
  // 2.abba
  for (let i = 0; i < s.length; i++) {
    expandAroundCenter(i, i + 1)
    expandAroundCenter(i - 1, i + 1)
  }
  function expandAroundCenter(left, right) {
    //判断是不是在字符串的首尾并且两个字符相等
    while (left >= 0 && right < s.length && s[left] === s[right]) {
      if (right - left + 1 > maxLength) {
        // right-left+1相当于aba,2-0+1=3,更新maxlength和start
        maxLength = right - left + 1
        start = left
      }
      left--
      right++
    }
  }
  // 最终返回截取的回文字符串
  return s.substring(start,start+maxLength)
}
// @lc code=end