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 |
---|