1. Valid Palindrome

아현·2021년 3월 3일
0

Algorithm

목록 보기
2/400

리트코드

리스트로 변환

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칸씩 앞으로 이동한다.
profile
For the sake of someone who studies computer science

0개의 댓글