1.문제
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() 라는 함수를 사용하는 것이였다. 직접 배열을 컨트롤 하는 것이 확실히 속도와 메모리 측면에서 빠른것을 다시 한번 느꼈다.
'Algorithm' 카테고리의 다른 글
| [leetCode 209번] Minimum Size Subarray Sum (Java) (0) | 2023.08.28 |
|---|---|
| [leetCode 167번] Two Sum II - Input Array Is Sorted (Java) (0) | 2023.08.28 |
| [leetCode 121] Best Time to Buy and Sell Stock (Java) (0) | 2023.08.24 |
| [leetCode 189번] Rotate Array (Java) (0) | 2023.08.24 |
| [leetCode 169번] Majority Element (Java) (0) | 2023.08.24 |