리트코드
리스트로 변환
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
- isalnum(): 영문자, 숫자 여부를 판별하는 함수 해당하는 문자만 추가
- lower(): 모두 소문자로 변환
- pop(): 제일 마지막에 들어간 것 빼내기, 인덱스 지정가능
데크 자료형을 이용한 최적화
class Solution:
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.popleft() != strs.pop():
return False
return True
- Deque = collections.deque()
슬라이싱 사용
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower()
//정규식으로 불필요한 문자 필터링
s= re.sub('[^a-z0-9]', '', s)
return s == s[::-1] //슬라이싱 (뒤집기)
➕문자열 슬라이싱
- s[1:] == 문자열의 시작 또는 끝은 생략 가능하다.
- s[:] == 둘 다 생략하면 사본을 리턴한다.
- s[1:100] == 인덱스가 지나치게 클 경우 문자열의 최대 길이만큼만 표현된다.
( s[1:]과 동일하다)
- s[::1] == 1은 기본값으로 동일하다.
- s[::-1] == 뒤집는다
- s[::2] == 2칸씩 앞으로 이동한다.