LeetCode 5. Longest Palindromic Substring

개발공부를해보자·2025년 1월 6일

LeetCode

목록 보기
6/95

파이썬 알고리즘 인터뷰 문제 6번(리트코드 5번) Longest Palindromic Substring
https://leetcode.com/problems/longest-palindromic-substring/

나의 풀이

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if len(s) < 2:
            return s
        result = ""
        for mid in range(len(s) - 1):
            if s[mid] == s[mid + 1]:
                left, right = mid, mid + 1
                while s[left] == s[right]:
                    temp = s[left:right + 1]
                    if len(temp) > len(result):
                        result = temp
                    left -= 1
                    right += 1
                    if left < 0 or right >= len(s):
                        break
            left = right = mid
            while s[left] == s[right]:
                temp = s[left:right + 1]
                if len(temp) > len(result):
                    result = temp
                left -= 1
                right += 1
                if left < 0 or right >= len(s):
                    break
        
        return result

다른 풀이

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if len(s) < 2 or s == s[::-1]:
            return s
        
        def expand(left, right):
            while left >= 0 and right < len(s) and s[left] == s[right]:
                left -= 1
                right += 1
            return s[left + 1:right]
        
        result = ''

        for mid in range(len(s)):
            result = max(result, expand(mid, mid), expand(mid, mid + 1), key = len)
            
        return result

오답

  • 테스트 케이스
    ccc
class Solution:
    def longestPalindrome(self, s: str) -> str:
        if len(s) < 2:
            return s
        result = ""
        for mid in range(len(s) - 1):
            if s[mid] == s[mid + 1]: #ccc는 홀수개인데 이 경우로 들어가서 틀림
                left, right = mid, mid + 1
            else:
                left = right = mid
            while s[left] == s[right]:
                temp = s[left:right + 1]
                if len(temp) > len(result):
                    result = temp
                left -= 1
                right += 1
                if left < 0 or right >= len(s):
                    break
        
        return result
        #홀수, 짝수인 경우를 먼저 나누어야함.
profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글