728x90
문제 : 주어진 문자열이 팰린드롬인지 확인, 대소문자 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
예제:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.
Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.
💡 palindrome(팰린드롬)? 앞 뒤가 똑같은 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장
솔루션:
- 리스트로 변환
# 리스트 활용 시간 복잡도 : O(n²)
def isPalindrome(self, s:str) -> bool:
strs = []
for char in s:
if char.isalnum(): # isalnum()을 통해 영문자 숫자 판별
strs.append(char.lower())
while len(strs) > 1: # 팰린드롬 판별 여부
if strs.pop(0) != strs.pop(): # 맨앞 글자랑 맨 뒷글자랑 비교해서 다르면 False 같으면 True
return False
return True
- 데크 자료형을 이용한 최적화
# 데크 활용 시간 복잡도 : O(n)
def isPalindrome(self, s: str) -> bool:
strs: Deque = collections.deque() # 자료형 데크로 선언
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
'알고리즘 공부 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 - 자료형 (0) | 2022.01.22 |
---|---|
파이썬 알고리즘 인터뷰를 통한 팁 (0) | 2022.01.20 |
04 가장 흔한 단어(Most common words) (2) | 2022.01.10 |
03 로그 파일 재 정렬(reorder data in log files) (0) | 2022.01.10 |
02 문자열 뒤집기(Reverse string) (0) | 2022.01.10 |