Home [LeetCode] valid-palindrome
Post
Cancel

[LeetCode] valid-palindrome

문제 링크

valid palindrome

문제 설명

입력으로 주어지는 문자열에서 공백과 따옴표를 제거하고, 대문자인 경우 모두 소문자로 변경합니다.

그리고 양 끝이 다를 경우 False, 모두 같을 경우 True를 반환하는 문제입니다.

그리고 입력 문자열에는 영어와 숫자가 포함됩니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        arr = [i for i in s if i.isdigit() or i.isalpha()]
        
        if len(arr) == 0:
            return True
        else:
            lt = 0
            rt = len(arr)-1
            while lt < rt:
                if arr[lt] != arr[rt]:
                    return False
                lt += 1
                rt -= 1
            return True

접근한 풀이 방법

  • 우선 입력 문자열을 모두 소문자로 변경해줍니다.

  • 그리고 문제에서 문자에는 영숫자라고 했으니, 입력 문자가 숫자이거나 알파벳일 경우 arr 리스트에 담아줍니다. 저는 리스트 컴프리헨션을 사용했습니다.

  • 만약 arr의 길이가 0이면 빈 문자열이므로 True를 반환해줍니다.

  • arr의 길이가 있을 경우, 투 포인터 알고리즘을 사용해야합니다. lt를 문자열 왼쪽 끝, rt를 문자열의 오른쪽 끝으로 초기화하고, while문을 통해 반복해서 arr[lt]와 arr[rt]를 비교해줍니다.

  • while문의 종료 조건은 lt가 rt보다 커지는 경우나, 만약 arr[lt]와 arr[rt]가 다를 경우입니다.

  • while문이 모두 종료되었을 경우 비교가 다 끝났기 때문에 입력 문자열이 valid palindrome인 경우이므로 True를 리턴해줍니다.

This post is licensed under CC BY 4.0 by the author.

레디스를 사용해 선착순 요청 처리하기

도커 컴포즈로 그라파나+프로메테우스 실행시키기(1/2)