본문 바로가기

자료구조,알고리즘

LeetCode-125 Valid Palindrome 파이썬 풀이

 

Valid Palindrome - LeetCode

Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric cha

leetcode.com

문제

주어진 문자열에서 알파벳과 숫자가 아닌 특수 문자를 모두 제거하고, 모든 알파벳을 소문자로 변경합니다. 이렇게 변경된 문자열을 뒤집었쓸 때 와 뒤집지 않았을 때가 동일하면 true를 동일하지 않으면 false를 반환하면 됩니다.

풀이

파이썬에선 쉽게 문자열을 뒤집고, 공백 제거를 할 수 있기 때문에 금방 해결할 수 있습니다. 

1. 전체 문자열을 소문자로 변경합니다.

2. 특수 문자를 제거합니다. (공백 제거 포함, 영/숫자가 아닐 경우 모두 제거)

3. 문자열을 뒤집었을 때와 뒤집지 않았을 때를 비교하여 같으면 True 아니라면 False를 반환합니다.

 

1번과 2번의 실행 순서가 바뀌어도 크게 상관은 없습니다.

1번에서 lower() 함수를 사용하여 소문자로 변경하고, 이때 문자열에는 대문자가 남아 있지 않게 되기 때문에

소문자와, 숫자 범위의 아스키코드를 벗어나는 경우 replace를 사용하여 제거합니다. 파이썬은 문자열 슬라이싱을 활용해

문자열을 거꾸로 뒤집을 수 있습니다. 이를 사용하여 기존의 문자열과 비교하면 됩니다. 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        for element in s:
            if 0 < ord(element) < 48 or 57 < ord(element) < 97 or 122 < ord(element) < 128:
                s = s.replace(element,"")
        if (s[::-1] != s) :
            return False
        else:
            return True