본문 바로가기
Study/Algorithm

[LeetCode] #125. valid palindrome (python)

by 투말치 2022. 2. 17.

목차

    반응형

    문제

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

     

    Valid Palindrome - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

    주어진 문자열이 팰린드롬 문자열인지 확인하는 문제다. 팰린드롬은 앞에서 부터 읽은 문자열과 뒤에서 부터 읽는 문자열이 같은 문장을 말한다. 예를 들자면 수박이박수, 다시합창합시다와 같은 문구는 팰린드롬이다.

     

    풀이

     

    #내 풀이

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            s=s.lower()
            re_s=''
    
            for l in s:
                if l.isalnum():
                    re_s=re_s+l
    
            rev_list=re_s[::-1]
    
            if rev_list==re_s:
                return True
            else:
                return False

     

    우선 팰린드롬인지 판별하기 전에 문자열 처리를 해야 한다. 대문자는 소문자로 바꾸고 숫자나 알파벳이 아닌 문자는 제거해야한다.

    파이썬에서 기본으로 제공해주는 lower()로 소문자를 만들고 isalnum() 함수를 사용해서 숫자, 알파벳인지 확인했다.

    처리한 문자열은 [::-1] 인덱싱을 사용해서 뒤집어 주고 전처리된 문자열과 같은지 확인한 뒤 같으면 True, 아니면 False를 반환한다.

     

     

    #책 풀이

    책에서는 정규표현식을 사용해서 풀었다. 원래 나도 정규표현식을 사용해서 푸는 시도를 했는데 re.sub를 모르고 replace를 사용해야 되는 줄 알고 삽질하느라 정규표현식을 사용하지 않고 isalnum을 사용해서 풀었다.

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            s = s.lower()
            # 정규식으로 불필요한 문자 필터링
            s = re.sub('[^a-z0-9]', '', s)
    
            return s == s[::-1]  # 슬라이싱

     

    re.sub(정규표현식, 대상 문자열, 치환 문자)

    위 코드에서는 알파벳과 숫자가 아니면(^) ''로 치환하라는 뜻이다. ^는 정규표현식에서 [] 안에 있을 때 not을 의미하고 [] 밖에서 사용할 때는 문자열의 처음을 의미한다.

     

     

    참고한 책 : 파이썬 알고리즘 인터뷰

     

    반응형