본문 바로가기

공부

[leetcode] 125. Valid Palindrome -python

반응형

 

 

문제

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를 반환한다.

반응형