LeetCode/Top Interview 150

125. Valid Palindrome

hyunkookim 2024. 11. 28. 17:23

125. Valid Palindrome

 

내 코드

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        """
        isalnum은 **"is alphabetic or numeric"**의 약자로, 
        알파벳 또는 숫자인지 확인하는 메서드입니다.
        - is: "인지 확인"을 의미 (True/False 결과 반환).
        - al: alphabetic(알파벳)의 약자.
        - num: numeric(숫자)의 약자.
        숫자 이거나 알파벳이면 True

        isdigit(): 숫자인지 확인
        """

        only_alnum = ""
        for w in s:
            if w.isalnum():
                if w.isdigit():
                    only_alnum += w
                else:
                    only_alnum += w.lower()
        return only_alnum == only_alnum[::-1]

 

https://youtu.be/jJXJ16kPFWg?si=MAYq3FrIYDVxobEH

 

 

class Solution:
    # 주어진 문자 c가 알파벳(A-Z, a-z) 또는 숫자(0-9)인지 확인하는 함수
    def alphaNum(self, c):
        return (ord('A') <= ord(c) <= ord('Z') or  # 대문자 여부 확인
                ord('a') <= ord(c) <= ord('z') or  # 소문자 여부 확인
                ord('0') <= ord(c) <= ord('9'))    # 숫자 여부 확인

    # 문자열 s가 팰린드롬인지 확인하는 함수
    def isPalindrome(self, s: str) -> bool:
        # 두 포인터를 문자열의 시작(l)과 끝(r)에 초기화
        l, r = 0, len(s) - 1

        # 포인터가 서로 만나기 전까지 반복
        while l < r:
            # 왼쪽 포인터가 가리키는 문자가 알파벳/숫자가 아니면 포인터 이동
            while l < r and not self.alphaNum(s[l]):
                l += 1  # 왼쪽 포인터를 오른쪽으로 이동
            # 오른쪽 포인터가 가리키는 문자가 알파벳/숫자가 아니면 포인터 이동
            while l < r and not self.alphaNum(s[r]):
                r -= 1  # 오른쪽 포인터를 왼쪽으로 이동

            # 대소문자를 무시하고 현재 포인터의 문자가 다르면 팰린드롬이 아님
            if s[l].lower() != s[r].lower():
                return False  # 팰린드롬이 아니므로 False 반환

            # 양쪽 포인터를 한 칸씩 이동
            l, r = l + 1, r - 1

        # 모든 문자가 일치하면 팰린드롬임
        return True

'LeetCode > Top Interview 150' 카테고리의 다른 글

15. 3Sum  (0) 2024.11.29
167. Two Sum II - Input Array Is Sorted  (0) 2024.11.29
68. Text Justification  (0) 2024.11.28
28. Find the Index of the First Occurrence in a String  (0) 2024.11.28
6. Zigzag Conversion  (0) 2024.11.28