题目描述
- 给你一个字符串
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;
};