[LeetCode]Longest Palindromic Substring

2023. 4. 7. 21:23·SW개발/코딩테스트

https://leetcode.com/problems/longest-palindromic-substring/

 

Longest Palindromic Substring - LeetCode

Can you solve this real interview question? Longest Palindromic Substring - Given a string s, return the longest palindromic substring in s.   Example 1: Input: s = "babad" Output: "bab" Explanation: "aba" is also a valid answer. Example 2: Input: s = "cb

leetcode.com

 

문제 분석

주어진 문자열에서 가장 긴 부분 palindrome(앞으로 읽어도 뒤로 읽어도 동일한)을 구하는 문제입니다.

 

처음 시도한 답안

class Solution:
    def longestPalindrome(self, s: str) -> str:
        max_palindrome = ""

        for i in range(len(s)):
            # this if for odd length palindrome
            sub = self.check_palindrome(s, i, i)
            if len(sub) > len(max_palindrome):
                max_palindrome = sub
            
            # this is for even length palindrome
            sub = self.check_palindrome(s, i, i+1)
            if len(sub) > len(max_palindrome):
                max_palindrome = sub

        return max_palindrome

    def check_palindrome(self, s, left, right):
        # expand as long as 'left' can grow to the left.
        # and 'right' and grow to the right.
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1

        # our last matched index of left and right.
        return s[left+1:right]

접근 방법

  1. 문자열의 길이만큼 순회합니다.
  2. 홀수 길이인 경우를 가정한 palindrome 과, 짝수 길이인 경우를 가정한 palindrome 검사를 두번 수행합니다.
  3. 두 값중 큰 값이 가장 긴 palindrome이 됩니다.

Palindrome 검사 과정

  1. 순회하는 반복문 안에서 해당 위치의 인덱스를 기준점으로(짝수인 경우 i, i+1) 하여 왼쪽과 오른쪽으로 문자열 탐색을 확장해나갑니다.
  2. left는 0보다는 같거나 커야하고, right는 문자열의 길이보다 작은 동안 반복하고, 확장한 왼, 오른쪽의 문자가 동일한 경우에는 탐색을 계속해나갑니다.
  3. 만약 서로 다른 문자열을 만난다면 검사를 종료하고, 바로 직전의 위치까지의 문자열만을 슬라이싱하면 Palindrome을 구할 수 있습니다.

이 문제도 풀이를 시도하다 실패해 다른 사람들의 답안을 많이 참고했습니다. 그 중에서 가장 이해하기 쉬운 코드를 가져왔습니다.

 

medium 난이도의 문제를 여럿 풀다보니 두개의 포인터를 활용해서 풀이하는 해법들이 굉장히 많았습니다. 

아마도 그 이유는 최대한 반복횟수를(시간 복잡도) 줄이면서 탐색하는데 유용하게 사용하는 방법이지 않나 합니다. 조금 더 많이 풀다보면 자연스럽게 투 포인터를 활용하는 방안을 떠올려볼 수 있지 않을까 생각합니다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]3Sum  (0) 2023.04.09
[LeetCode]Container With Most Water  (0) 2023.04.08
[LeetCode]Longest Substring Without Repeating Characters  (0) 2023.04.06
[LeetCode]Add Two Numbers  (0) 2023.04.05
[LeetCode]Pascal's Triangle  (0) 2023.04.04
'SW개발/코딩테스트' 카테고리의 다른 글
  • [LeetCode]3Sum
  • [LeetCode]Container With Most Water
  • [LeetCode]Longest Substring Without Repeating Characters
  • [LeetCode]Add Two Numbers
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배달비 공유
    플레이스토어
    django
    Contributor
    음식
    오픈소스
    라이프 스타일
    배달
    컨트리뷰터
    배공파용
    트리 #AVL #알고리즘 #자료구조
    g
    어플리케이션
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[LeetCode]Longest Palindromic Substring
상단으로

티스토리툴바