Return the longest palindromic substring of s.
Every palindrome mirrors around a center: a character (odd length) or a gap between two characters (even length). Expand outward from each of the 2n − 1 centers.
1function longestPalindrome(s: string): string {2let lo = 0, hi = 0;3const expand = (l: number, r: number) => {4while (l >= 0 && r < s.length && s[l] === s[r]) { l--; r++; }5if (r - l - 1 > hi - lo + 1) { lo = l + 1; hi = r - 1; }6};7for (let i = 0; i < s.length; i++) {8expand(i, i);9expand(i, i + 1);10}11return s.slice(lo, hi + 1);12}
best = first character.
Space: play/pause · ←/→: step