Valid Palindrome

Nine-JH·2023년 8월 29일
0

leetCode

목록 보기
5/5
post-custom-banner

https://leetcode.com/problems/valid-palindrome/?envType=study-plan-v2&envId=top-interview-150

문제 정리

Palindrome을 찾는 문제다.

Palindrome : 거꾸로 읽어도 동일한 단어를 말함.
토마토가 대표적인 예시다.


풀이

몇 가지 프로세스를 진행해야 한다.

  • 공백이나, 1글자인가? => isPalindrome = true
  • alphanumeric 이 아니면 무시한다.

alphanumeric : 숫자나, 알파벳을 말함.


예시

A man, a plan, a canal: Panama

// 1. if(공백 or 1글자?) = false
// 2. 숫자나 알파벳이 아닌 단어는 무시 => amanaplanacanalpanama
// 3. Palindrome 검증 = true


Q1. 숫자 알파벳을 미리 필터링한 문자열을 비교 해야하나?

굳이 그렇게는 안해도 된다. 탐색 인덱스에 위치한 char가 숫자나 알파벳이 아니면 다음 탐색 인덱스로 넘어가면 그만이다.

코드

class Solution {
    public boolean isPalindrome(String s) {
    
        if (s.isEmpty()) {
            return true;
        }

        int leftIndex = 0;
        int rightIndex = s.length() - 1;

        while (leftIndex < rightIndex) {
            char leftChar = s.charAt(leftIndex);
            char rightChar = s.charAt(rightIndex);

            if (!Character.isLetterOrDigit(leftChar)) {
                leftIndex++;
            } else if (!Character.isLetterOrDigit(rightChar)) {
                rightIndex--;
            } else {
                if (Character.toLowerCase(leftChar) != Character.toLowerCase(rightChar)) {
                    return false;
                }
                leftIndex++;
                rightIndex--;
            }
        }

        return true;
    }
}
post-custom-banner

0개의 댓글