[ Leetcode ] 125번 Valid Palindrome 풀이

2021. 4. 15. 23:18·Archive/Develop
728x90
반응형

 

이 포스팅은 "파이썬 알고리즘 인터뷰" 를 읽고 작성된 포스팅임을 밝힙니다.

 

 

 

leetcode.com/problems/valid-palindrome/

 

Valid Palindrome - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

 

 

 

 

 

펠린드롬이란?

 

 

앞뒤가 같은 단어나 문장을 말하는 것으로,

 

"수박은 박수" 나 "다시 합창합시다" 와 같은 것을 말한다.

 

 

해당 문제는 대소문자를 구분하지 않은 영문자와 숫자를 대상으로

펠린드롬인지 아닌지에 대한 여부를 판단하는 문제이다.

 

 

 

 

 

List 로 풀기

 

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        strs=[]
        for char in s:
            if char.isalnum():
                strs.append(char.lower())
        while len(strs) > 1:
            if strs.pop(0) != strs.pop():
                return False
        return True

 

 

Runtime : 288ms

 

 

데크 자료형을 이용해 풀기

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        strs: Deque = collections.deque()
            
        for char in s:
            if char.isalnum():
                strs.appned(char.lower())
                
        while len(strs)> 1:
            if strs.popleft() != strs.pop():
                return False
        return True

 

 

Runtime : 56ms

 

 

 

리스트로 구현한 코드에서 pop(0) 에 해당하는 빅오는 O(n) 이지만,

데크 자료형에서의 popleft() 는 O(1) 이기 때문에, 이렇게 Runtime 차이가 난다.

 

 

 

 

 

슬라이싱을 이용해서 풀기

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        s = re.sub('[^a-z0-9]','',s)
        
        return s==s[::-1]

 

 

진짜 문자열 슬라이싱은 사기다.

 

Runtime : 40ms

 

 

 

슬라이싱을 이용할 때,

우리가 위치를 지정해주면 해당 위치를 가진 배열의 포인터를 얻게 된다.

이를 통해 연결된 객체를 찾아 실제 값을 찾아내는 것이다.

 

이 과정은 속도가 굉장히 빨라서 문자열을 조작할 때면

슬라이싱을 사용하는 것을 권장한다.

 

 

 

 

 

 

 

오늘도 즐거운 파이썬 ~ 

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ LeetCode ] 937번 Reorder Data in Log Files 풀이  (0) 2021.04.16
[ LeetCode ] 344번 Reverse String  (0) 2021.04.15
코테를 위한 준비 과정(순서)  (0) 2021.04.15
[ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임  (0) 2021.04.13
[ Oracle ] 오라클 서브쿼리 예제  (0) 2021.04.12
'Archive/Develop' 카테고리의 다른 글
  • [ LeetCode ] 937번 Reorder Data in Log Files 풀이
  • [ LeetCode ] 344번 Reverse String
  • 코테를 위한 준비 과정(순서)
  • [ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    oracle db
    자바스크립트 API
    장고
    파이썬 기초
    코드업
    docker
    백준 풀이
    오라클
    코드업 파이썬 기초 100제
    보안뉴스
    Django
    파이썬 백준
    파이썬
    javascript
    백준 파이썬
    자바스크립트 객체
    카카오 100일 프로젝트
    비박스
    파이썬 알고리즘
    백준 문제풀이
    Codeup
    코드업 기초
    파이썬 기초 문제
    Oracle
    Git
    C++
    백준
    Python
    자바스크립트
    파이썬 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Leetcode ] 125번 Valid Palindrome 풀이
상단으로

티스토리툴바