Blog

LeetCode 125: 문자열을 뒤집어 팰린드롬 확인하기

비교할 문자만 남깁니다

Valid Palindrome 문제와 예시

팰린드롬은 앞에서 읽든 뒤에서 읽든 같은 문자열입니다. 이 문제에서는 영문과 숫자만 비교하고 영문의 대소문자는 구분하지 않습니다.

먼저 정규식 [^a-zA-Z0-9]으로 공백과 특수문자 등 비교하지 않을 문자를 지웠습니다. 그다음 소문자로 바꿔 비교할 문자열 forward를 만들었습니다.

문자열 길이를 이용해 직접 뒤집을까 생각하다가 StringBuilder의 reverse()가 떠올랐습니다. forward를 넣고 뒤집어 backward를 만든 뒤 같은 위치의 문자를 하나씩 비교합니다. 다른 문자를 만나면 바로 false를, 끝까지 같으면 true를 반환합니다.

코드와 당시 결과

Java
class Solution {
    public boolean isPalindrome(String s) {
        String forward = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
        StringBuilder sb = new StringBuilder();
        String backward = sb.append(forward).reverse().toString();
        for(int i = 0; i < forward.length(); i++){
            if(forward.charAt(i) != backward.charAt(i)){
                return false;
            }
        }
        return true;
    }
}

문자열을 뒤집어 비교한 풀이의 제출 결과

reverse() 덕분에 구현은 간단했지만 제출 결과는 만족스럽지 않았습니다.