125. Valid Palindrome, 자바 풀이

이원석·2023년 8월 29일

Leetcode

목록 보기
5/22

[문제]
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 characters include letters and numbers.


모든 대문자를 소문자로 변환하고, 모든 영숫자가 아닌 문자를 제거합니다. 이후 앞 뒤로 동일하게 읽히는 경우를 회문이라고 합니다. (영숫자 문자에는 문자와 숫자가 포합됩니다.)
문자열이 회문이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.


class Solution {
    public boolean isPalindrome(String s) {
        char[] con = s.toCharArray();       

		// 1.
        StringBuilder sb = new StringBuilder();


        for (int i = 0; i < con.length; i++) {
            int get = con[i] - '0';

            if ((get >= 49 && get <= 74) || (get >= 17 && get <= 42) || (get >= 0 && get <= 9)) {
                sb.append(con[i]);
            }
        }

		// 2.
        char[] rc = sb.toString().toLowerCase().toCharArray();


		// 3.
        int l = 0;
        int r = rc.length - 1;
        int flag = 0;

        while (l < r) {
            if (rc[l] == rc[r]) {
                l++;
                r--;
            } else {
                flag = 1;
                break;
            }
        }

        if (flag == 1) {
            return false;
        } else {
            return true;
        }
    }
}

// 49 ~ 74, 17 ~ 42
  1. 주어진 문자열에서 영어 대소문자 및 숫자를 제외시키기 위해 아스키 코드값으로 변환하여 validation 후에 문자열로 저장한다.
  2. 문자열을 모두 소문자로 변환시킨다.
  3. 회문을 찾아야 하기 때문에 문자열의 시작좌 끝점을 비교해가며 동일하지 않은 경우 회문이 아니라고 판단한다. 시작점은 증가시키고 끝점은 감소시키며 둘이 같은 값을 가지거나 크로스하는 경우는 가운데 지점에 도착했다고 판단하여 반복문을 탈출한다.

0개의 댓글