본문으로 건너뛰기

펠린드롬 문자열

일반적인 방법

function isPalindrome(str) {
const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
return cleaned === cleaned.split('').reverse().join('');
}

투 포인터 방법 ( 더 빠름 )

function isPalindrome(str) {
const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
let left = 0;
let right = cleaned.length - 1;

while (left < right) {
if (cleaned[left] !== cleaned[right]) {
return false;
}
left++;
right--;
}

return true;
}

가장 긴 팰린드롬 문자열 찾기

function longestPalindrome(s) {
// s 가 널이거나 길이가 1인경우 s를 리턴
if(!s || s.length < 2) return s;

let start = 0;
let maxLength = 1;

function center(left, right) {
// left 와 rigth 가 유효한 범위내에 있고, left 와 right 의 문자열이 같을 경우만 반복
while(0 <= left && 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++) {
// 홀수 길이인 문자열에 대해서만 취급가능
center(i, i);
// 짝수 길이인 문자열에 대하서만 취급가능
center(i, i+1);
}

return s.substring(start, start + maxLength);
}