문자열 s에서 대문자를 소문자로 변환하고
알파벳, 숫자가 아닌 것을 제거했을 때
순방향, 역방향으로 읽어도 같은 문자열이라면 true 반환
아니라면 false 반환
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
s = s.toLowerCase().replace(/[^a-z0-9]/gi,'');
let i = 0;
let j = s.length - 1;
while (i < j) {
if (s[i] !== s[j])
return false;
i++;
j--;
}
return true;
};
첫 줄에서 소문자로 변환하고 숫자, 알파벳이 아닌 것들은 빈 문자로 대체
i는 앞에서부터, j는 뒤에서부터 인덱스 값 확인하여
둘이 다를 경우 false, 인덱스가 교차할 때까지 같다면 true 반환
Accepted
Runtime 44ms (Beats 99.55%)
Memory 51.32MB (Beats 84.56%)
toLowerCase까지는 바로 생각해 내서 적었는데, 숫자와 알파벳을 확인하는 함수는 따로 없었기 때문에 어떻게 해야하지 조금 생각했다. 치환할 생각은 못하고 그냥 문자열을 순회하면서 숫자, 알파벳이 아니라면 뛰어넘자 하면서 판단할 수 있는 방법을 찾다가 딱 알맞은 replace 정규식을 발견해서 적용했다. 평소에 정규식을 잘 사용하지 않기도 하고 워낙 자바스크립트에 편한 메소드가 많았어서 의존도가 높아졌던 것 같다. 덕분에 앞으로도 정규식을 잘 활용해봐야겠다는 깨달음을 얻었다.