/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
let ll = s.length;
let left = 0;
let right = 1;
let p = 0;
while (p < ll - 1) {
let new_left = p;
let new_right = p;
for (let i = p - 1; i >= 0; i--) {
if (s.charAt(i) === s.charAt(new_left)) {
new_left = i;
} else {
break;
}
}
for (let i = p + 1; i < ll; i++) {
if (s.charAt(i) === s.charAt(new_right)) {
new_right = i;
} else {
break;
}
}
p = new_right + 1;
let forll = new_left;
if (forll > ll - new_right - 1) {
forll = ll - new_right - 1;
}
let j = 1;
for (; j <= forll; j++) {
if (s.charAt(new_left - j) !== s.charAt(new_right + j)) {
break;
}
}
new_left = new_left - j + 1;
new_right = new_right + j - 1;
if (right - left < new_right + 1 - new_left) {
right = new_right + 1;
left = new_left;
}
}
return s.substring(left, right);
};