본문 바로가기
DEV/알고리즘 문제 풀이

LEETCODE(리트코드) 125번 Valid Palindrome (유효한 팬린드롬)

by krokerdile 2022. 11. 25.

파이썬 알고리즘 인터뷰를 보고 알고리즘이라고 해야 되나 자료구조라고 해야 되나 공부를 다시 조금씩 하는 중입니다. 이책에서는 리트코드 문제를 풀어서 영어 공부도 되지 않을까라는 생각에 책을 골랐는데 생각보다 많이 어려운 거 같아요.

문자열을 뒤집어도 같은 경우에는 똑같은 경우에는 true를 반환해주고 다른 경우에는 false로 반환해주면 되는 문제

문제를 보고 필요하다고 생각했던 것들은 아래와 같다.

  • 문자열들만 비교를 해줘야 되서 특수문자 다 빼주기
  • 문자열 뒤집는 걸 어떤 걸 써서 해줄지

그래서 각 항목 마다 써줄려고 했던 요소들은 아래와 같다.

정규표현식 문자열 치환 -  re.sub("[^a-zA-Z0-9]", "", s)

  • 첫 번째 인자 : [^a-zA-Z0-9]
  • 두 번째 인자 : 첫 번째 인자에 해당하는 경우에 두 번째 인자로 변경
  • 세 번째 인자 : 타입

문자열 Slice

  • str[::-1] → 이런방식으로 접근하는 방법을 Extended Slices라고 함.

전체 코드는 다음과 같다.

import re

class Solution:
    def isPalindrome(self, s: str) -> bool:
        new_str = re.sub("[^a-zA-Z0-9]", "", s)
        new_str = new_str.lower()
        rvs_str = new_str[::-1]

        if new_str == rvs_str:
            return True
        else:
            return False