LeetCode125 - Valid Palindrome

문이월·2022년 7월 21일

Algorithm

목록 보기
1/11

LeetCode 125

isinstance() : 데이터의 자료값을 확인하는 내장함수. 첫 번째 매개변수로는 확인하고자 하는 변수, 두 번째 매개변수로는 데이터의 타입을 입력한다.

isalnum() : 영문자, 숫자 여부를 판단하는 함수.

풀이 1. list로 변환

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

팰린드롬 여부는 다른 방식으로도 판별할 수 있다.

while len(l) > 1:
            if l.pop(0) != l.pop():
                return False
        return True

풀이 2. deque 이용

데크(popleft)를 사용한다면 속도를 더 높일 수 있다.

class Solution:
    def isPalindrome(self, s: str) -> bool:
        strs = collections.deque()
        
        for char in s:
            if char.isalnum():
                strs.append(char.lower())
                
        while len(strs) > 1:
            if strs.popleft() != strs.pop():
                return False
        return True
                    

풀이 3. 정규식(re) 사용

정규식을 이용한 슬라이싱을 사용한다면 가장 빠르게 해결 가능하다.

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        s = re.sub('[^a-z0-0]', '', s)
        
        return s == s[::-1]
  1. 리스트로 변환 : 304밀리초
  2. deque 사용 : 64밀리초
  3. 정규식 사용 : 36밀리초
profile
ㅋㅅㅋ

0개의 댓글