관리 메뉴

FU11M00N

[LeetCode] Valid Palindrome - Javascript 본문

알고리즘

[LeetCode] Valid Palindrome - Javascript

호IT 2023. 8. 27. 00:53

Valid Palindrome

[Palindrome: 글자를 거꾸로 읽어도 같은 뜻이 되는 문장. Robert Trebor을 글자 단위로 거꾸로 읽어도 Robert Trebor로 읽힌다.]

 

제약 조건 

1 <= s.length <= 2 * 10^5
s consists only of printable ASCII characters.

Example

ex1) Input: s = "A man, a plan, a canal: Panama"
     Output: true
     Explanation: "amanaplanacanalpanama" is a palindrome.

ex2) Input: s = "race a car"
     Output: false
     Explanation: "raceacar" is not a palindrome.
     
ex) Input: s = " "
    Output: true
    Explanation: s is an empty string "" after removing non-alphanumeric characters.
    Since an empty string reads the same forward and backward, it is a palindrome.

접근 방식

두가지의 방법으로 문제를 풀이했다.

1) 자바스크립트의 reverse() 메서드를 활용해 뒤집어진 문자열과 기존의 문자열을 비교해 같은지 비교해 true와 false를 반환했다.

그 과정에서 문자열을 소문자로 변경하고, 정규식을 이용해 영어 알파벳과 숫자가 아니라면 공백으로 치환해 reverse()를 사용했다.

 

2) 투포인터 방법으로 문자열의 왼쪽과 오른쪽을 좁혀가며 비교해 하나라도 다른 문자열이라면 false를 반환하고 아니라면 true를 반환하는 방식을 사용했다. 확실히 투포인터의 원리에 대한 수업을 듣고 문제에 접근하니 훨씬 쉽게 풀 수 있었다.

이 또한 문자열을 소문자로 변경하고 알파벳과 숫자가 아니라면 정규식 치환을 한 후 비교를 하였다.

 

투포인터: 두 개의 포인터를 동시에 움직여가며 데이터를 지정

 

solve 01

/**
 * @param {string} s
 * @return {boolean}
 */

var isPalindrome = function (s) {
   s = s.toLowerCase();
   s = s.replace(/[^a-z0-9]/g, '');

   let spliteString = s.split('');
   var compareString = spliteString.join('');

   let reverseArray = spliteString.reverse();
   let answer = reverseArray.join('');

   if (compareString === answer) {
      return true;
   } else {
      return false;
   }
};

solve 02

/**
 * @param {string} s
 * @return {boolean}
 */

var isPalindrome = function (s) {
   s = s.toLowerCase();
   s = s.replace(/[^a-z0-9]/g, '');

   let left = 0;
   let right = s.length - 1;

   for (let i = 0; i < s.length; i++) {
      if (s[left] === s[right]) {
         left++;
         right--;
      } else {
         return false;
      }
   }
   return true;
};

 

 

Comments