leetcode hot100 5.最长回文子串

105 阅读1分钟

题目:

image.png

思路:

1.回文字符长度有偶数个或奇数个,所以要枚举当前字符和(下一个字符与当前字符)是回文数的情况,取两种情况的最大值;判断回文长度函数center();

2.维护一个left和right,记录当前情况回文串跨度最长时的下标,如果有更长的回文串就更新left和left;

3.最后使用slice截取字符串返回;

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
  if (s.length < 2) return s;

  let maxlen = 0, left = 0, right = 0;
  for (let i = 0; i < s.length - 1; i++) {
    let l1 = center(s, i, i)
    let l2 = center(s, i, i + 1)
    maxlen = Math.max(l2, l1);
    if (maxlen > right - left) {
      left = i - Math.floor((maxlen - 1) / 2);
      right = i + Math.floor(maxlen / 2)
    }
  }
  return s.slice(left + 1, right)
};

function center(s, left, right) {
  while (s[left] == s[right] && left >= 0 && right < s.length) {
    left--;
    right++;
  }
  return right - left + 1;
}

image.png

坚持每日一题!坚持!坚持!