[알고리즘] 유효한 팰린드롬

June·2021년 1월 16일
0

알고리즘

목록 보기
11/260

유효한 팰린드롬

내 풀이

class Solution:
    def isPalindrome(self, s: str) -> bool:
        str = []
        for char in s.lower():
            if char.isalnum():
                str.append(char)

        return str == str[::-1]

주어진 string을 .lower()를 이용해서 소문자로 바꾼 다음 한 글자씩 alphanumeric이라면 (알파벳이거나 숫자)을 isalnum()을 이용해서, 따로 리스트에 저장한다. 만약 그 저장한 리스트와 뒤집은 리스트가 같은지 비교한다.

책의 괜찮은 풀이

def isPalindrome(s: str) -> bool:
    # 자료형 데크로 선언
    Deque = collections.deque()
    
    for char in s:
        if char.isalnum():
            Deque.append(char.lower())
    
    while len(Deque) > 1:
        if Deque.popleft() != Deque.pop():
            return False
    
    return True

리스트가 아니라 Deque을 이용해서 좌우에서 하나씩 빼며 대칭이 되는지 비교했다.

def isPalindrome(s: str) -> bool:
    s = s.lower()
    #정규식으로 문자 필터링
    s = re.sub('[^a-z0-9]', '', s)
    
    return s == s[::-1]

정규식을 이용해서 알파벳과 숫자가 아닌 것들을 제거했다.

0개의 댓글