/** * @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); };