박종훈 알고리즘 블로그

(Leetcode) 125 - Valid Palindrome

https://neetcode.io/practice

위 링크에 있는 문제들을 eazy 부터 시간이 있을때마다 풀어보려고 한다.


https://leetcode.com/problems/valid-palindrome/

내가 작성한 풀이

class Solution {
    public boolean isPalindrome(String s) {
        StringBuilder filtered = new StringBuilder();
        for(char c : s.toCharArray()) {
            // '0' == 48, '9' == 57, 'A' == 65, 'z' == 122
            if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) {
                filtered.append(c);
            } else if ((c >= 'A' && c <= 'Z')) {
                filtered.append((char) (c + 32));
            }
        }

        for(int i = 0; i < filtered.length() / 2; i++) {
            if (filtered.charAt(i) != filtered.charAt(filtered.length() - i - 1)) {
                return false;
            }
        }

        return true;
    }
}

문제 조건에 따라 숫자, 소문자, 대문자 를 제외한 문자는 제거해야 하며, 대문자는 소문자로 바꾸어야 한다. java 는 char 타입이 존재하기 때문에 char 타입으로 문제를 해결하였다. 필터를 마치면 문자열이 좌우 대칭인지 확인한다.

TC, SC

이 풀이의 시간 복잡도는 O(n)이고, 공간 복잡도는 O(n)이다.