JavaScript学习笔记
题目要求
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 | 输入 & 输出 & 解释 |
---|---|
示例1 | 输入: "babad" 输出: "bab" 注意: “aba” 也是一个有效答案 |
示例2 | 输入: "cbbd" 输出: “bb” |
JavaScript代码
var longestPalindrome = function(s) {
if(s.length == 0 || s.length == 1) {
return s;
}
let resultSet = new Array();
resultSet.push(s.slice(0, 1));
for (let i = 1; i < s.length; i++) {
let halfLength = 1;
while (s.charAt(i - halfLength) == s.charAt(i + halfLength) && (i - halfLength >= 0)) {
resultSet.push(s.slice(i - halfLength, i + halfLength + 1));
halfLength++;
}
if (s.charAt(i) == s.charAt(i - 1)) {
resultSet.push(s.slice(i - 1, i + 1));
let halfLength = 1;
while ((s.charAt(i - halfLength) == s.charAt(i + halfLength - 1)) && (i - halfLength >= 0)) {
resultSet.push(s.slice(i - halfLength, i + halfLength));
halfLength++;
}
}
}
let result = resultSet.shift();
while (resultSet.length != 0) {
let temp = resultSet.pop();
if (temp.length >= result.length) {
result = temp;
}
}
return result;
};
解题思路
- 新建一个数组resultSet用于存放回文子串;
- 遍历字符串s,对每个字符进行左右拓展,寻找所有回文子串,存入resultSet;
- 在resultSet中找到最长的回文子串并返回。