Skip to content

Latest commit

 

History

History
51 lines (46 loc) · 1.21 KB

0005. 最长回文子串.md

File metadata and controls

51 lines (46 loc) · 1.21 KB

5. 最长回文子串

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


image.png

遍历 s,如果 s[i] 和它右侧的字符相同或者 s[i] 两侧的字符相同,那么向左右延伸。

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
  if (s.length < 2) {
    return s
  }
  var max = ''
  var left = 0
  var right = 0
  for (var i = 0; i < s.length; i ++) {
    // 如果 s[i] 和它右侧的字符相同
    if (i + 1 < s.length && s[i] === s[i + 1]) {
      left = i
      right = i + 1
      while (left >= 0 && right < s.length && s[left] === s[right]) {
        left --
        right ++
      }
      if (right - left - 1 > max.length) {
        max = s.substring(left + 1, right)
      }
    }
    // 如果 s[i] 两侧的字符相同
    if (i - 1 >= 0 && i + 1 < s.length && s[i - 1] === s[i + 1]) {
      left = i - 1
      right = i + 1
      while (left >= 0 && right < s.length && s[left] === s[right]) {
        left --
        right ++
      }
      if (right - left - 1 > max.length) {
        max = s.substring(left + 1, right)
      }
    }
  }
  return max || s[0]
};