중앙 확장법을 이용한 풀이이다.
주어진 인덱스로부터 확장하는 left와 right 값을 기준으로 펠린드롬을 비교하며 점차 확장해나가며 최대 길이의 펠린드롬을 찾게되는 구조이다,
function longestPalindrome(s: string): string {
if (s.length < 2) return s;
let start = 0;
let maxLength = 1;
function expandAroundCenter(left: number, right: number): void {
while (left >= 0 && right < s.length && s[left] === s[right]) {
const currentLength = right - left + 1;
if (currentLength > maxLength) {
start = left;
maxLength = currentLength;
}
left--;
right++;
}
}
for (let i = 0; i < s.length; i++) {
expandAroundCenter(i, i); // 홀수 길이 팰린드롬
expandAroundCenter(i, i + 1); // 짝수 길이 팰린드롬
}
return s.substring(start, start + maxLength);
}