문제
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
Given a string s, return true if it is a palindrome, or false otherwise.
제출 코드
class Solution(object):
def isPalindrome(self, s):
# strip
s = s.replace(" ", "")
# upper change
s = lower(s)
# not alpha will be delete
s = re.sub('[^A-Za-z0-9]+', '', s)
half_len = len(s)/2
f = s[:half_len]
if(len(s)%2 == 0):
# even
l = s[:half_len-1:-1]
else:
# odd
l = s[:half_len:-1]
if(f == l):
return True
else:
return False
이 문제는 파이썬에서 문자열을 다룰 때 사용하는 기초적인 메소드를 알기 좋았다.
추가로 놓쳤던 연산자 "~" 도 생각해볼 수 있는 문제였다.
Operator ~ is the bitwise NOT operator. It performs logical negation on a given number by flipping all of its bits: ~x == -x-1 , ~0 == -1, ~1 == -2 and etc.
연산자 ~ 는 비트 단위의 NOT 연산자인데, 모든 비트를 뒤집어 주어진 숫자에 대한 논리적 부정을 한다.
0을 부정하면 -1로,
아래와 같은 방법도 있다.
이렇게 for문을 한번에 쓰는 스킬이 손에 익히기 쉽지 않은거 같다.
class Solution:
def isPalindrome(self, s: str) -> bool:
s = [c.lower() for c in s if c.isalnum()]
return all (s[i] == s[~i] for i in range(len(s)//2))
주어진 문장인 s 의 char 단위로 c 를 .isalnum() 함수로 숫자, 문자가 아닌 값은 다 없애고
c의 문자의 값을 다 소문자로 만든다.
그리고 해당 문자열 길이의 반 동안의 for 문을 돌리고, 해당 문자열에 대해 not 부정 연산이 모두 Ture면 Ture를 반환한다.
'공부' 카테고리의 다른 글
docker: error during connect: dockerDesktopLinuxEngine: The system cannot find the file specified. (0) | 2025.01.14 |
---|---|
클라우드 서비스 Azure vs AWS 비교 (4) | 2025.01.12 |
[BigQuery] 빅쿼리 슬롯 및 SQL 쿼리 최적화 (1) | 2024.09.23 |
[SQL] ROW_NUMBER() 함수 (1) | 2024.09.14 |
[BigQuery] 빅쿼리 성능 최적화 종류 (0) | 2024.09.13 |