프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

문제

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

 

Longest Palindromic Substring - LeetCode

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 = "cbbd" Output: "bb"   Constraints: * 1 <= s.le

leetcode.com

 

 

풀이

 

난이도: Medium 

 

다이나믹 프로그래밍으로 해결 가능한 유명한 문제.

 

dp[start][end] 는 문자열의 start에서 end 까지의 최대 팰린드롬 길이를 의미한다.

팰린드롬이 되려면 일단, start와 end의 문자가 같아야한다.

 

따라서 start와 end의 문자가 같은 경우만 팰린드롬 여부를 확인하면 된다.

여기서 dp에는 가장 긴 팰린드롬 길이가 저장되어 있으므로,

dp[start][end] = dp[start +1][end -1] + 2가 된다.

 

이러한 알고리즘은  start와 end 모두 확인해야 하므로 O(N^2)의 시간 복잡도와 공간 복잡도가 소요된다.

 

 

 

다이나믹으로 해결하는 것은 너무 많이 봐왔으니 다른 해결법도 확인해보자.

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

 

해결법의 Approach 4: Expand Around Center 를 확인해보자.

 

팰린드롬은 가운데의 문자를 기준으로 대칭이다.

가운대 문자는 단 한개 ex) "aba" 에서의 "b", "abbba" 에서의 "b"

혹은 두개가 될 수 있다. ex) "abba" 에서의  "bb", "abbbba"에서의 "bb"

 

따라서 문자열을 순서대로 순회하면서 두가지 경우에서, 펠린드롬 여부를 확인하면서 양쪽으로 확장해 나간다.

이러한 알고리즘은  O(N^2)의 시간 복잡도가 소모되지만, 공간 복잡도는 O(1)이다.

 

단, 다이나믹은 이미 계산한 값을 바로 이용하므로 공간 복잡도는 높더라도 좀더 빠를 수도 있다고 생각한다.

 

 

코드

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함