ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [string] longest palindromic substring
    Algorithm/LeetCode 2025. 1. 19. 13:26

    ✅ Problem

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

     

     Approach & Solution

    방식)

    더보기
    • 투 포인터 방식을 사용한다.
    • 팰린드롬이 될 수 있는 최소 길이(1 초과)의 값을 기준으로 양 옆으로 확장해나간다.
      • 최소 길이 : 2 or 3
      • ex) aa, aba
    class Solution {
        
        int left, maxLen;
    
        public String longestPalindrome(String s) {
            // 문자 길이 저장
            int len = s.length();
    
            // 길이가 1인 경우 예외 처리
            if (len < 2) return s;
    
            // 우측으로 한 칸씩 이동하며 투 포인터 조사
            for (int i = 0; i < len - 1; i++) {
                extendPalindrome(s, i, i + 1); // 2칸짜리 투 포인터
                extendPalindrome(s, i, i + 2); // 3칸짜리 투 포인터
            }
    
            // 왼쪽과 최대 길이만큼을 더한 오른쪽만큼의 문자를 정답으로 리턴
            return s.substring(left, left + maxLen);
        }
    
        public void extendPalindrome(String s, int start, int end) {
            // 투 포인터가 유효한 범위 내에 있고 양쪽 끝 문자가 일치하는 팰린드롬인 경우 범위 확장
            while (start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end)) {
                start--;
                end++;
            }
    
            // 기존 최대 길이보다 큰 경우 값 교체
            if (maxLen < end - start - 1) {
                left = start + 1;
                maxLen = end - start - 1;
            }
        }
    }

     

    시간 복잡도

    • O(n^2)
      • extendPalindrome 메서드는 최대 O(n)이고, longestPalindrome 메서드에서 최대 2 * (n-1)번 호출됨

    'Algorithm > LeetCode' 카테고리의 다른 글

    [array] product of array except self  (0) 2025.02.08
    [array] 3sum  (0) 2025.02.01
    [array] trapping rain water  (0) 2025.01.26
    [array] two sum  (1) 2025.01.25
    [string] group anagrams  (0) 2025.01.18

    댓글

Designed by Tistory.