Development/Algorithms

Valid Palindrome in python3

juniz 2020. 7. 29. 23:32
반응형

 

List only

def is_palindrom(s: str) -> bool:
    strs = []
    # Using deque
    for char in s:
        if char.isalnum():
            strs.append(char.lower())

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

 

Using deque

from collections import deque


def is_palindrom(s: str) -> bool:
    strs = 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

Deque : Double-ended queue로  양쪽에서 값들을 수정할 수 있다. 

pop: .popleft(), .pop()

append : .appendleft(), .append()

etc : .reverse()

 

Regex and slicing

import re
def is_palindrom(s: str) -> bool:
    s = s.lower()
    s = re.sub('[^a-z0-9]', '', s)
    return s == s[::-1]

 

Time complexity 를 생각하면 slicing을 선택하는 것이 바람직하다. 

 

반응형