문자열 조작

uoayop·2021년 3월 17일
0

알고리즘 스터디

목록 보기
5/11
post-thumbnail

해당 시리즈는 [ 파이썬 알고리즘 인터뷰 ] 를 통해 학습한 내용을 정리한 글입니다.


문자열 조작

문자열 조작이란 문자열을 변경하거나 분리하는 등의 여러 과정을 말한다.

관련된 문제를 풀어보면서 사용할만한 내장 함수를 정리해보자

유효한 팰린드롬

https://leetcode.com/problems/valid-palindrome/
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.

  • 팰린드롬 : 앞뒤가 똑같은 문장 (ex. 수박이박수🍉 )
#리스트 사용
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
index0 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] ==dkssud
  • s[::1]==안녕하세요
  • s[::-1] ==요세하녕하
  • s[::2] == 안하요
profile
slow and steady wins the race 🐢

0개의 댓글