dev-signer
개자이너
dev-signer
전체 방문자
오늘
어제
  • 분류 전체보기 (20)
    • Project (8)
      • DIMODAMO (1)
      • Menual (6)
      • WatchOS (1)
    • iOS (9)
      • Swift (6)
      • UI (2)
    • 코딩테스트 (2)
    • 일상 (1)
      • 이야기 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 주니어개발자
  • tuist
  • 스위프트
  • ios
  • 코딩테스트
  • SnapKit
  • watchos
  • swfit
  • 파이썬
  • 사이드프로젝트
  • Swift
  • 의존성주입
  • menual
  • 리뷰요청하기
  • 파이썬 알고리즘 인터뷰
  • 디지털미디어디자인
  • 메뉴얼
  • XCode
  • 알고리즘
  • Dependency Injection

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev-signer

개자이너

코딩테스트

Palindrome - [LeetCode.125]

2021. 5. 2. 17:52

LeetCode.125

주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.

 

팰린드롬의 정의

앞뒤가 똑같은 단어나 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장을 팰린드롬(Palindrome)이라고 한다.

 


[풀이 1] 리스트로 변환

대소문자 여부를 구분하지 않고, 영문자 숫자만을 대상으로 한다.

strs = []
for char in s:
	if char.isalnum():
    	strs.append(char.lower())

 

 

isAlnum()은 영문자 숫자 여부를 판별하는 함수.

대소문자를 구분하지 않으므로 lower()로 모두 소문자로 변환한다.

 

while len(strs) > 1:
	if strs.pop(0) != strs.pop():
    	return False

 

위와 같이 팰린드롬 여부를 판별할 수 있다.

여기서 눈여겨 볼 수 있는 함수는 pop()이다.

파이썬에서는 pop()에서도 인덱스를 지정해서 값을 가져올 수 있다.

 

def isPalindrome(self, s):
	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

[풀이 2] 덱 자료형을 이용한 최적화

def isPalindrome(self, s: str):
    strs: Deque = collections.deque()

    for char in s:
        if char.isalnum():
            strs.append(char.lower())

    while len(strs) > 1:
        if strs.popleft() != strs.pop():
            return False

    return True

 


 

[풀이 3] 슬라이싱 사용

def isPalindrome(self, s: str):
    s = s.lower()
    # 정규식으로 불필요한 문자필터링
    s = re.sub('[a^z0-9]', '', s)
    
    # 슬라이싱 (뒤집는다)
    return s == s[::-1]

 

반응형

'코딩테스트' 카테고리의 다른 글

문자열 뒤집기 - [LeetCode.344]  (0) 2021.05.02
    '코딩테스트' 카테고리의 다른 글
    • 문자열 뒤집기 - [LeetCode.344]
    dev-signer
    dev-signer

    티스토리툴바