내 코드
class Solution:
def isPalindrome(self, s: str) -> bool:
"""
isalnum은 **"is alphabetic or numeric"**의 약자로,
알파벳 또는 숫자인지 확인하는 메서드입니다.
- is: "인지 확인"을 의미 (True/False 결과 반환).
- al: alphabetic(알파벳)의 약자.
- num: numeric(숫자)의 약자.
숫자 이거나 알파벳이면 True
isdigit(): 숫자인지 확인
"""
only_alnum = ""
for w in s:
if w.isalnum():
if w.isdigit():
only_alnum += w
else:
only_alnum += w.lower()
return only_alnum == only_alnum[::-1]
https://youtu.be/jJXJ16kPFWg?si=MAYq3FrIYDVxobEH
class Solution:
# 주어진 문자 c가 알파벳(A-Z, a-z) 또는 숫자(0-9)인지 확인하는 함수
def alphaNum(self, c):
return (ord('A') <= ord(c) <= ord('Z') or # 대문자 여부 확인
ord('a') <= ord(c) <= ord('z') or # 소문자 여부 확인
ord('0') <= ord(c) <= ord('9')) # 숫자 여부 확인
# 문자열 s가 팰린드롬인지 확인하는 함수
def isPalindrome(self, s: str) -> bool:
# 두 포인터를 문자열의 시작(l)과 끝(r)에 초기화
l, r = 0, len(s) - 1
# 포인터가 서로 만나기 전까지 반복
while l < r:
# 왼쪽 포인터가 가리키는 문자가 알파벳/숫자가 아니면 포인터 이동
while l < r and not self.alphaNum(s[l]):
l += 1 # 왼쪽 포인터를 오른쪽으로 이동
# 오른쪽 포인터가 가리키는 문자가 알파벳/숫자가 아니면 포인터 이동
while l < r and not self.alphaNum(s[r]):
r -= 1 # 오른쪽 포인터를 왼쪽으로 이동
# 대소문자를 무시하고 현재 포인터의 문자가 다르면 팰린드롬이 아님
if s[l].lower() != s[r].lower():
return False # 팰린드롬이 아니므로 False 반환
# 양쪽 포인터를 한 칸씩 이동
l, r = l + 1, r - 1
# 모든 문자가 일치하면 팰린드롬임
return True
'LeetCode > Top Interview 150' 카테고리의 다른 글
15. 3Sum (0) | 2024.11.29 |
---|---|
167. Two Sum II - Input Array Is Sorted (0) | 2024.11.29 |
68. Text Justification (0) | 2024.11.28 |
28. Find the Index of the First Occurrence in a String (0) | 2024.11.28 |
6. Zigzag Conversion (0) | 2024.11.28 |