Problem Solving 2022. 9. 3. 23:04

[LeetCode] 5. Longest Palindromic Substring (JS)

목차
  1. 핵심 아이디어
  2. 복잡도
  3. 설명
  4. 코드 (Javascript)

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

 

Longest Palindromic Substring - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

핵심 아이디어

  • 모든 문자에 대해 two pointer를 확장해 가며 s[left] === s[right] 를 비교한다
  • substring 길이가 홀수인 경우, 짝수인 경우 case로 나눠서 두 번 구한다

 

복잡도

  • 시간 복잡도: O(n^2)
    • string 모든 문자 순회 N * two pointer 비교 N

설명

"가장 긴 팰린드롬 부분 문자열을 출력하라"

 

팰린드롬: 뒤집어도 같은 문자열 => two pointer 로 s[left] === s[right] 를 이용한다 라는 발상으로 푸는 문제이다. 설명이 빈약해서 당황했었는데 그냥 그걸 n번 반복해서 O(n^2)짜리 문제였다.

substring이 홀수일수도, 짝수일수도 있다는 것에 주의해야 한다. 이 문제에서는 같은 로직을 두 번 돌려서 해결했다.

조건을 만족하는 경우 left, right가 한번 더 움직이고, while문이 끝났을 때는 조건이 맞지 않는 상태라는 점도 주의해야 한다. 따라서 substring을 할 때는 left, right의 이전값을 기준으로 잘라야 한다.

 

코드 (Javascript)

/**
 * @param {string} s
 * @return {string}
 */

var longestPalindrome = function(s) {
    /**
     * get palindrome substirng with two pointers
     */
    const getPalindromeSubstring = (left, right) => {
        while( (left >= 0 && right < s.length) && (s[left] === s[right]) ) {
            left -= 1;
            right += 1;
        }
        
        return s.substring(left + 1, right);
    }
    
    let longest = "";
    
    for(let i = 0; i < s.length; i++) {
        const oddSubstring = getPalindromeSubstring(i,i);
        const evenSubstring = getPalindromeSubstring(i,i+1);
        
        longest = [longest, oddSubstring, evenSubstring].reduce((prev, str) => str.length > prev.length ? str : prev);
    }
    
    return longest;
};

 

유튜브 NeetCode 해설 영상

저작자표시 (새창열림)

'Problem Solving' 카테고리의 다른 글

[LeetCode] 321. Create Maximum Number (Python)  (0) 2024.04.12
[LeetCode] 42. Trapping Rain Water - 스택 풀이 (Python)  (0) 2024.03.01
[LeetCode] 49. Group Anagrams (JS)  (0) 2022.09.03
[LeetCode] 819. Most Common Word (JS)  (0) 2022.09.03
[LeetCode] 937. Reorder Data in Log Files (JS)  (0) 2022.09.03
  1. 핵심 아이디어
  2. 복잡도
  3. 설명
  4. 코드 (Javascript)
'Problem Solving' 카테고리의 다른 글
  • [LeetCode] 321. Create Maximum Number (Python)
  • [LeetCode] 42. Trapping Rain Water - 스택 풀이 (Python)
  • [LeetCode] 49. Group Anagrams (JS)
  • [LeetCode] 819. Most Common Word (JS)
이우진 기술 블로그개발자 이우진의 기술 블로그입니다
개발자 이우진
이우진 기술 블로그
  • All (86)
    • Spring Framework (20)
    • MSA (7)
      • Event Driven Architecture (3)
    • Java (3)
    • Flink (2)
    • Computer Science (9)
      • Object Oriented Programming (3)
    • Problem Solving (15)
    • Design Pattern (0)
    • React (4)
    • Javascript (2)
    • Web (3)
    • Tools & Environment (3)
    • C++ (2)
    • misc (5)
    • Essay (3)
      • 기술 회고 (5)
  • 홈
  • 태그
  • 관리자
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
[LeetCode] 5. Longest Palindromic Substring (JS)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.