코딩테스트/LeetCode

[문자열 조작] 팰린드롬

scone 2024. 5. 6. 09:19

🥕 [문자열 조작] 팰린드롬

문제 링크

url : https://leetcode.com/problems/valid-palindrome/

 

🍒 문제 분석

알파벳과 숫자를 제외한 문자열 제거

이후 화순 문자인지 확인 ( 'heh' 와 같이 앞뒤로 같은 언어 인지 )

 

🍓 내 해결 과정

ord를 사용해 알파벳, 숫자 여부를 확인하여 리스트에 추가

만든 리스트를 join을 사용해 합침

리스트 슬라이싱으로 비교

 

🥑 내 풀이

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        s = s.lower()
        tmp = []
        for i in s:
            if 97 <= ord(i) <= 122:
                tmp.append(i)
            elif 48 <= ord(i) <= 57:
                tmp.append(i)
        s = ''.join(tmp)

        return s == s[::-1]

 

지금 코드를 다시 보니, 어차피 리스트 슬라이싱 할껀데 join을 굳이 쓸 필요가 없었다.

 

 

🥑 정규식을 활용한 풀이

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]

 

https://jjuha-dev.tistory.com/entry/Python-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-resub%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B9%98%ED%99%98%ED%95%98%EA%B8%B0

 

정규식 테스트 사이트 : https://regexr.com/

 

 

🍉 깨달은 점 및 정리

1. 리스트 슬라이싱은 내부적으로 C로 구현되어있기 때문에 상당히 빠른 로직이라고 한다.

2. 정규식 표현 [^문자들] 은 괄호 안의 문자를 제외하겠다는 의미이다.

3. char.isalnum() 으로 문자 또는 숫자 여부를 확인할 수도 있다.

str.isalpha()
str.isdigit()
str.isupper()
str.islower()
str.isalnum()