|
| 1 | +function getMaxPalindrome(l: number, r: number, s: string) { |
| 2 | + while (l >= 0 && r < s.length && s[l] == s[r]) l--, r++; |
| 3 | + return [++l, --r, r - l + 1]; |
| 4 | +} |
| 5 | + |
| 6 | +function longestPalindrome(s: string): string { |
| 7 | + let [maxPalStart, maxPalEnd, maxPalLen, len] = [0, 0, 0, s.length]; |
| 8 | + for (let i = 0; i < len; i++) { |
| 9 | + const oddPal = getMaxPalindrome(i, i, s); |
| 10 | + const evenPal = getMaxPalindrome(i, i + 1, s); |
| 11 | + if (oddPal[2] > maxPalLen) |
| 12 | + (maxPalLen = oddPal[2]), |
| 13 | + (maxPalStart = oddPal[0]), |
| 14 | + (maxPalEnd = oddPal[1]); |
| 15 | + if (evenPal[2] > maxPalLen) |
| 16 | + (maxPalLen = evenPal[2]), |
| 17 | + (maxPalStart = evenPal[0]), |
| 18 | + (maxPalEnd = evenPal[1]); |
| 19 | + } |
| 20 | + return s.slice(maxPalStart, maxPalEnd + 1); |
| 21 | +} |
| 22 | + |
| 23 | +console.log(longestPalindrome('babad'), ' === bab/aba'); |
| 24 | +console.log(longestPalindrome('cbbd'), ' === bb'); |
| 25 | + |
| 26 | +// let [l, r, currLen] = [i, i, 0]; |
| 27 | +// while (l >= 0 && r < len && s[l] == s[r]) { |
| 28 | +// currLen = r - l + 1; |
| 29 | +// if (currLen > maxPalLen) |
| 30 | +// (maxPalLen = currLen), (maxPalStart = l), (maxPalEnd = r); |
| 31 | +// l--, r++; |
| 32 | +// } |
| 33 | +// (l = i), (r = i + 1); |
| 34 | +// while (l >= 0 && r < len && s[l] == s[r]) { |
| 35 | +// currLen = r - l + 1; |
| 36 | +// if (currLen > maxPalLen) |
| 37 | +// (maxPalLen = currLen), (maxPalStart = l), (maxPalEnd = r); |
| 38 | +// l--, r++; |
| 39 | +// } |
0 commit comments