DEV/알고리즘 문제 풀이

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

krokerdile 2022. 11. 25. 17:32
728x90

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

문자열을 뒤집어도 같은 경우에는 똑같은 경우에는 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
728x90