본문 바로가기
Algorithm

[leetCode 125번] Valid Palindrome (Java)

by ddahu 2023. 8. 28.

1.문제

Valid Palindrome - LeetCode

 

Valid Palindrome - LeetCode

Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric cha

leetcode.com


2.문제설명

 

이 문제는 팰린드롬이라는 문자열인지 판별하는 문제이다. 거꾸로 읽어도 그대로인 글 을 팰린드롬이라고 한다.


3.소스코드

public static boolean isPalindrome(String s){
        String[] strs = s.toLowerCase().replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]", "").split("");
        int left = 0;
        int right = strs.length-1;
        while (left < right){
            if(!strs[left].equals(strs[right])){
                return false;
            }
                left++;
                right--;
        }
        return true;
    }

4. 소스코드 해설

 

  •  팰린드롬을 알기위해서는 우선 문자열을 모두 같은 패턴으로 일치해야한다. 모두 소문자로 전환 후 특수문자를 제거 한뒤 배열로 저장한다.
  • 이분 탐색을 활용하여 맨앞 부터 맨뒤를 순차적으로 비교하면서 서로 다르면 False 를 반환 

5. 회고

 

 

결과로 보면 무작정 이분탐색으로 분다고 빠른것은 아니란 것을 알았다. 

 

여기서 속도와 메모리를 많이 쓰는 이유를 다른 사람들의 코드를 보았을때 나는 replaceAll()이라는 함수를 사용하여 특정 패턴을 분리하고 배열을 새로 복사하는 거 자체에서 속도와 메모리를 더 많이 쓰는것으로 봤다.

 

제일 많이 사용하고 빠른 문제 풀이는 charAt() 라는 함수를 사용하는 것이였다. 직접 배열을 컨트롤 하는 것이 확실히 속도와 메모리 측면에서 빠른것을 다시 한번 느꼈다.