diff --git a/valid-palindrome/seona926.js b/valid-palindrome/seona926.js new file mode 100644 index 000000000..e17f36005 --- /dev/null +++ b/valid-palindrome/seona926.js @@ -0,0 +1,36 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + // 1. 아래 방식은 O(n^2)에 수렴함 + // s의 구성요소들을 소문자로 변환 후 배열에 넣고 + // 현재 길이가 2 이상이라면 + // shift === pop 이면 true 아니면 false + + // 2. 투 포인터 사용 + + let str = s.toLowerCase().replace(/[^a-z0-9]/g, ""); + + // 두 포인터 사용: 시작과 끝에서부터 비교 + let left = 0; + let right = str.length - 1; + + while (left < right) { + if (str[left] !== str[right]) { + return false; // 두 문자가 다르면 palindrome 아님 + } + + left++; + right--; + } + + return true; +}; + +/* + 1. 시간복잡도: O(n) + - toLowerCase, replace, 포인터 사용에 O(n) 소요됨 + 2. 공간복잡도: O(n) + - 변수 str이 O(n) 차지함 +*/