코딩테스트/LeetCode
[문자열 조작] 팰린드롬
scone
2024. 5. 6. 09:19
🥕 [문자열 조작] 팰린드롬
문제 링크
url : https://leetcode.com/problems/valid-palindrome/
🍒 문제 분석
알파벳과 숫자를 제외한 문자열 제거
이후 화순 문자인지 확인 ( 'heh' 와 같이 앞뒤로 같은 언어 인지 )
🍓 내 해결 과정
ord를 사용해 알파벳, 숫자 여부를 확인하여 리스트에 추가
만든 리스트를 join을 사용해 합침
리스트 슬라이싱으로 비교
🥑 내 풀이
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = s.lower()
tmp = []
for i in s:
if 97 <= ord(i) <= 122:
tmp.append(i)
elif 48 <= ord(i) <= 57:
tmp.append(i)
s = ''.join(tmp)
return s == s[::-1]
지금 코드를 다시 보니, 어차피 리스트 슬라이싱 할껀데 join을 굳이 쓸 필요가 없었다.
🥑 정규식을 활용한 풀이
class Solution(object):
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s = s.lower()
s = re.sub('[^a-z0-9]', '', s)
return s == s[::-1]
정규식 테스트 사이트 : https://regexr.com/
🍉 깨달은 점 및 정리
1. 리스트 슬라이싱은 내부적으로 C로 구현되어있기 때문에 상당히 빠른 로직이라고 한다.
2. 정규식 표현 [^문자들] 은 괄호 안의 문자를 제외하겠다는 의미이다.
3. char.isalnum() 으로 문자 또는 숫자 여부를 확인할 수도 있다.
str.isalpha()
str.isdigit()
str.isupper()
str.islower()
str.isalnum()