[오늘의 코테연습장] [ LeetCode] 125. Valid Palindrome

Mini_me·2023년 8월 26일
0

공부[코테연습장]

목록 보기
20/36
post-thumbnail

📑 문제

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

  • 주어진 문자열 s가 palindrome이면 true반환, 아니라면 false 반환하시오

📑 접근방식

접근 방식은 Two Pointer을 활용하여 접근하였습니다.
먼저 문장에 있는 특수문자를 제거하고 소문자로 변환하였습니다.
주어진 문장이 palindrome인지만 검사하면 됩니다.

    1. 문자열 정리: 주어진 문자열에서 공백과 특수문자를 제거하고, 모든 문자를 소문자로 변환합니다.

    2. Palindrome 확인: 두 개의 포인터(왼쪽과 오른쪽)를 사용하여 palindrome인지 확인합니다.

    • 왼쪽 포인터는 문자열의 시작 idx, 오른쪽 포인터는 문자열의 마지막 idx
    • 왼쪽 포인터가 오른쪽 포인터보다 작거나 같은 동안 반복합니다.
      • 만약 왼쪽 문자와 오른쪽 문자가 같다면, 왼쪽 포인터는 한 칸 앞으로, 오른쪽 포인터는 한 칸 뒤로 이동시킵니다.
      • 만약 다르다면 반복을 중단하고 false를 반환합니다.

    3. 만약 함수가 아직 return 되지 않았다면 주어진 문장은 palindrome이므로 true를 반환합니다.

📑 CODE

class Solution {
    public boolean isPalindrome(String s) {
        String str = s.replaceAll(" ", "");
        str = str.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]", "");
        str = str.toLowerCase();
        
        if (str == null || str.length() < 1) {
            return true;
        }
        
        int left = 0;
        int right = str.length() - 1; 
        
        while (left <= right && str.charAt(left) == str.charAt(right)) { 
            left++;
            right--;
        }
        
        return left >= right;
    }
}

0개의 댓글

관련 채용 정보