리트코드, Valid Palindrome_적절한 팰린드롬
TL;DR
- 팰린드롬 : 원본과 원본을 뒤집었을 때가 동일한 경우. 예)"아 많다 많다 많다 많아"
- 문자열 슬라이싱을 활용 할 수 있는가
문제 분석
1. 주어진 문자열 s에 대해서 해당 문자열이 팰린드롬인지 아닌지를 판별하라.
2. 문자열은 알파벳 또는 숫자로만 이루어져 있다고 가정한다.
- 1 : 해결해야 하는 문제에 대해서 말하고 있다.
- 2 : 문제의 조건에 대해서 소개하고 있다. 주어지는 문자열 s에서 영어 대-소문자와 숫자를 제외한 문자들은 모두 무시해도 된다.
입출력 형태
- 주어진 입력 s가 팰린드롬이라면 True를 아니라면 False를 반환해야 한다.
- 예시 1번에서 주어진 문자열 s에서 알파벳과 숫자로 이루어진 문자는 뒤집어도 동일한 팰린드롬이다. 따라서, True를 반환한다.
- 예시 2번은 뒤집었을 경우 "racaecar"가 되어, 팰린드롬이 아니다.
풀이
class Solution:
def isPalindrome(self, s: str) -> bool:
# 알파벳과 숫자를 제외한 문자들을 걸러낸다. 대-소문자를 동일하게 처리하기 위해 lower로 소문자로 만든다.
p = re.compile('[a-zA-Z\d]')
word = ''.join(p.findall(s)).lower()
return word == word[::-1] # 원본과 뒤집은 문자가 같은지 여부를 반환한다.
- `정규식`을 사용하여 알파벳과 숫자 외의 문자들을 걸러낸다.
- `lower()`를 통해 모든 알파벳을 소문자로 변경한다. 대소문자를 따로 비교할 필요가 없어진다.
- 원본 문자열인 `word`와 슬라이싱을 활용하여 뒤집은 문자열 `word[::-1]`을 비교한다.
- 문자열 슬라이싱 : [시작 인덱스(이상) : 종료 인덱스(미만) : 단계]
a = "안녕하세요."
a[:] # 안녕하세요. 문자열 전체 인덱스를 슬라이싱한 결과이다.
a[1:3] # 녕하, 1 <= 인덱스 < 3를 슬라이싱한 결과이다.
a[1:-2] # 녕하, - 인덱스로도 슬라이싱 할 수 있다.
a[::-1] # .요세하녕안 전체 인덱스를 -1만큼씩 이동하며 슬라이싱한다.
a[::2] # 안하요 전체 인덱스를 +2만큼씩 이동하며 슬라이싱한다.
반응형
'개발 > Algorithm' 카테고리의 다른 글
[리트코드] Reorder Data in Log Files(python) (0) | 2021.05.28 |
---|---|
[리트코드] Reverse String(python) (0) | 2021.05.28 |
[프로그래머스] 로또의 최고 순위와 최저 순위(python) (0) | 2021.05.27 |
[프로그래머스] 신규 아이디 추천(python) (0) | 2021.05.26 |
[프로그래머스] 키패드 누르기(python) (0) | 2021.05.24 |