/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
// 문자와 숫자만 남기고 전부 제거.
const regex = /[^a-zA-Z0-9가-힣ㄱ-ㅎ]/g;
const alphanumeric = s.replaceAll(regex, "").toLowerCase();
let left = 0;
let right = alphanumeric.length - 1;
while(left < alphanumeric.length){
if(alphanumeric[left] === alphanumeric[right]){
left++;
right--;
continue;
}
return false;
}
return true;
};
이 문제는 two pointer 알고리즘을 사용하는 문제이다.
하나의 포인터는 앞에서부터, 다른 포인터는 뒤에서부터 탐색을 진행한다.
우선, palindrome임을 확인하기 위해서는 문자와 숫자만 남기고 전부 제거할 필요가 있다.
또한, 소문자로 전환하여 끝과 끝을 비교해 나갈 수 있도록 만들어준다.
이후는 간단하다.
두 포인터의 인덱스를 증가, 감소시키면서 일치 여부를 확인해나가면 된다.
다른 분들도 비슷한 풀이법을 사용하고 있다.
아스키 코드를 직접 변환해서 사용하는 분들도 계시는데,
필자도 이 방법을 선호하지만 아스키 코드를 모르면 사용할 수 없다는 단점이 있어서 좋지 않다고 생각한다.