[leetcode] Valid Palindrom

2023. 1. 24. 15:36알고리즘

- palindrom 문자열은 문자열의 모든 알파벳을 소문자로 바꾼 non-alphanumeric 문자를 제외한 문자열과 반전시킨 문자열이 같은 경우를 뜻함
- non-alphanumeric 문자 : 알파벳, 숫자가 아닌 문자

👉 palindrom 문자열인지 아닌지 리턴하는 알고리즘

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lower()
        answer = ''

        for i in s:
            if i.isalpha() or i.isdigit():
                answer += i

        return answer == answer[::-1]

- 문자열의 각 문자를 loop를 돌며 알파벳이나 숫자일 경우에만 answer 변수에 담아 이를 반전시킨 결과와 동일한지 true/false 여부를 리턴했다

- 그런데 뭔가 깔끔하지 않음

> answer라는 별도의 변수를 선언하지 않는 방법을 생각해보자

 

정규표현식 사용

re.sub(pattern, replace, text)
: text 중 pattern에 해당하는 부분을 replace로 대체

 

import re
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lower()
        s = re.sub('[^a-z0-9]','',s)

        return s == s[::-1]

- 우선 문자열 s 의 알파벳 대문자를 소문자로 치환한 다음, 알파벳 소문자가 아니거나, 숫자가 아닌 문자열을 정규 표현식 re.sub() 함수를 사용하여 제거했다.

- return 시에 문자열 슬라이싱을 이용하여 반전 문자열과 동일한지(palindrom인지) check