리트코드_125 유효한 팰린드롬_Easy (문자열_특수문자 제거_정규식)

RostoryT·2022년 9월 15일
0

String and Implementation

목록 보기
13/18

내가 푼

  • 리스트 풀이법
  • 문자열.isalnum() : 문자열과 숫자만 ㅇㅋ하는 함수
class Solution:
    def isPalindrome(self, s: str) -> bool:
        tmp = []
        s1 = s.lower()
        for i in s1:
            if i.isalpha() or i.isalnum():
                tmp.append(i)
        for i in range(1, (len(tmp)//2)+1):
            if tmp[i-1] != tmp[-i]:            # 하나라도 같지 않으면 return flase
                return False
        return True
        


솔루션

  • 데크 자료형 사용한 최적화
    • 데크 사용 시 리스트보다 속도가 빨라진다!!
    • 근데 책 정답보다 빠른거지, 내꺼보단 느림
      • 나는 두 번재 for문을 절반만 돌려서 진행했는데
      • 책에선 pop(0)과 pop() 둘을 비교했었다.
      • 그래서 리스트 속도가 느렸던거
      • pop(0)이 O(n)이니까!!
  • 이 코드엔 pop()없음 - 내 코드 뒤에 붙인거라
from collections import deque
class Solution:
    # 솔루션 - 데크로 속도 향상
    def isPalindrome(self, s: str) -> bool:
        strs = deque()
        
        for i in s:
            if i.isalnum():
                strs.append(i.lower())
                
        for i in range(1, (len(strs)//2)+1):
            if strs[i-1] != strs[-i]:            # 하나라도 같지 않으면 return flase
                return False
        return True


솔루션2

  • 정규식 사용
    • 특수문자 제거
    • 매우빠르다
class Solution:
    # 솔루션 - 정규식 사용
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        
        # 정규식으로 불필요한 문자 필터링
        s = re.sub('[^a-z0-9]', '', s)
        
        return s == s[::-1]  # 슬라이싱으로 결과 출력

profile
Do My Best

0개의 댓글