해당 시리즈는 [ 파이썬 알고리즘 인터뷰 ] 를 통해 학습한 내용을 정리한 글입니다.
문자열 조작이란 문자열을 변경하거나 분리하는 등의 여러 과정을 말한다.
관련된 문제를 풀어보면서 사용할만한 내장 함수를 정리해보자
https://leetcode.com/problems/valid-palindrome/
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
#리스트 사용
class Solution:
def isPalindrome(self, s: str) -> bool:
result = []
for char in s:
if char.isalnum():
result.append(char.lower())
while len(result)>1:
if (result.pop(0)!=result.pop()):
return False
return True
#디큐(deque) 사용
class Solution:
def isPalindrome(self, s: str) -> bool:
deque = []
for char in s:
if char.isalnum():
deque.append(char.lower())
while len(result)>1:
if (deque.popleft()!=deque.pop()):
return False
return True
#슬라이싱 사용
class Solution:
def isPalindrome(self, s: str) -> bool:
s=s.lower()
s=re.sub('[^a-z0-9]','',s) #불필요한 문제 필터링
return s==s[::-1]
사용한 방법에 따라 런타임 시간 차이가 난다.
리스트 >>>> deque > 슬라이싱
순으로 리스트가 가장 시간이 오래 소요됐고, deque와 슬라이싱은 비슷하지만 슬라이싱이 조금 덜 소요됐다.
리스트
isalnum()
: 알파벳, 한글, 숫자이면 true 반환
isalpha()
: 알파벳, 한글이면 true 반환
isdigit()
: 숫자이면 true 반환
deque
append(x)
: 맨 오른쪽(뒤쪽)에 추가
appendleft(x)
: 왼쪽(앞쪽)에 추가
extend(iterable)
: 오른쪽에 element를 추가해주는 메소드 - 하나씩 반환해서 추가해줌 ex) 'ef' → 'e','f'
extendleft(iterable)
: 왼쪽에 데이터를 추가
pop()
: 오른쪽에서부터 제거와 반환
popleft()
: 왼쪽에서부터 제거와 반환
rotate(n)
: n이 양수이면 오른쪽으로 회전, 음수이면 왼쪽으로 회전
슬라이싱
슬라이싱을 하면 새로운 객체를 생성하게 된다.
➢ 일부분을 복사해서 가져온다고 생각하자
a[start: end: step]
- start : 슬라이싱 시작할 위치
- end : 슬라이싱을 끝낼 위치로 end는 포함하지 않음
- step : stride 라고도 하며 몇개씩 끊어서 가져올지 정함 ( 옵션 )
예시
s = " 안녕하세요 "
s 안 녕 하 세 요 index 0 1 2 3 4 index -5 -4 -3 -2 -1
s[1:4]
== 녕하세s[1:-2]
== 녕하s[1:]
== 녕하세요s[:]
== 안녕하세요s[1:100]
== 녕하세요s[-1]
== 요s[-3:]
== 하세요s[:-3]
==dkssuds[::1]
==안녕하세요s[::-1]
==요세하녕하s[::2]
== 안하요