LeetCode#125. Valid Palindrome
첫째, 숫자와 알파벳을 제외한 다른 문자와 공백들을 삭제한다.
둘째, 거꾸로 뒤집어서 비교한다.
첫째, 정규표현식을 사용하여 숫자와 문자만 다른 변수에 담는다.
둘째, reversed()
를 통해 거꾸로 뒤집는다.
isalnum()
: 영문자, 숫자 여부를 판별하는 함수. 이걸 알고 있었다면 굳이 정규표현식을 이용하지 않아도 판별할 수 있다. 적용하면 아래와 같이 된다.for i in s: if i.isalnum(): result += i
거꾸로 뒤집지 않아도 된다.
:pop()
을 이용하는 방법이다.pop()
은 인덱스를 지정할 수 있다. 즉s
에 있는 영문자와 숫자만을 리스트에 담은 후 반복문을 통해 맨 앞과 맨 뒤의 값을 비교하는 것이다.str_list
는 영문자와 숫자만을 담은 리스트로 판단하고 보자.while len(str_list) > 1: if str_list.pop(0) != str_list.pop(): return False return True
Deque
: 자료구조로써 위의pop()
을 이용한 풀이에서List
에 담는 것이 아닌Deque
에 담는 것 만으로도 성능 향상이 나타난다. 또한pop(0)
보다popleft()
를 이용하면 성능 향상을 이룰 수 있다.
정규표현식
: 내 코드에 사용된match
가 아닌re.sub()
을 이용하여 한 번에 필터링 가능하다.s = s.lower() s = re.sub('[a-z0-9]', '', s) # 내 코드의 마지막 result의 모습과 동일
슬라이싱
: 파이썬을 처음 공부할 때도 슬라이싱을 잘 활용하고자 했는데 다시 돌아온 지금도 동일하다. 문자열 슬라이싱은 내부적으로 매우 빠르게 동작하므로 사용하는 것이 좋다.return s == s[::-1] # reversed()도, 조건문도 필요없다.