【前端算法每日一题】leetcode-005-最长回文子串(补2023-07-10)

105 阅读1分钟

题目描述

  • 给你一个字符串 s,找到 s 中最长的回文子串。
  • 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

解题思路

  • 如果字符串长度小于2,直接返回(肯定是回文串)
  • 双层循环遍历,第一层循环从 0 开始,len-1 结束(满足maxLength最少为2)
  • 当满足子串长度大于maxLength,并且子串是回文串,更新maxLength以及start
  • 判断子串是否是回文串的方法,左右向中心聚拢(sArr[left] === sArr[right]、sArr[left + 1] === sArr[right - 1] .... 直到 left < right 不成立)

解题代码(JavaScript)

  • 此解法为暴力枚举法,之后更新其他解法,请后续关注
var longestPalindrome = function (s) {
  let len = s.length;
  if (len < 2) {
    return s;
  }
  let maxLength = 1;
  let start = 0;
  let sArr = s.split("");
  for (let i = 0; i < len - 1; i++) {
    for (let j = i + 1; j < len; j++) {
      if (j - i + 1 > maxLength && isPalindrome(sArr, i, j)) {
        maxLength = j - i + 1;
        start = i;
      }
    }
  }
  return s.substring(start, start + maxLength);
};

// 判断是否为回文串
var isPalindrome = function (sArr, left, right) {
  while (left < right) {
    if (sArr[left] !== sArr[right]) {
      return false;
    }
    left++;
    right--;
  }
  return true;
};