给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if(!s || s.length < 2){ // 边界
return s;
}
// 设置两个索引,用来取最后结果的索引值
let start = 0,end = 0;
let len = s.length;
// 帮助函数,进行判断左右两次的值是否相同
const helpFun = (left,right) => {
while(left >= 0 && right <= len && s[left] == s[right]) {
left--;
right++;
}
// 返回的是这个长度
return right - left - 1;
}
// 变量这个字符串
for (let i = 0;i < len;i++) {
// len1 和 len2 分别表示奇数和偶数的数组 看看哪个的长度最长
let len1 = helpFun(i, i);
let len2 = helpFun(i, i + 1);
let maxlen = Math.max(len1,len2)
// 如果maxlen 长度 大于上次取得的长度,则更新 start end
if (maxlen > end - start) {
start = i - ((maxlen - 1) >> 1);
end = i + (maxlen >> 1);
}
}
// 字符串切割
return s.substring(start,end + 1)
};