Published on

Leetcode - Palindrome | 中心扩展法 | 最长回文子串

Authors
  • avatar
    Name
    Shelton Ma
    Twitter

5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串.回文字符串(Palindrome)是指正着读和反着读都一样的字符串.

  1. 常用思路 中心扩展法(经典简单好理解)

    • 枚举每一个字符为中心,向两边扩展检查是否为回文
    • 注意要处理奇数回文(中心1个字符)和偶数回文(中心2个字符)
  2. 实现

    // abcdacd
    function longestPalindrome(s) {
      if (s.length < 2) return s;
    
      let start = 0, maxLen = 1;
    
      function expandAroundCenter(left, right) {
        while (left >= 0 && right < s.length && s[left] === s[right]) {
          if (right - left + 1 > maxLen) {
            maxLen = right - left + 1;
            start = left;
          }
          left--;
          right++;
        }
      }
    
      for (let i = 0; i < s.length; i++) {
        expandAroundCenter(i, i);     // 奇数长度
        expandAroundCenter(i, i + 1); // 偶数长度
      }
    
      return s.substring(start, start + maxLen);
    }