항해99 코테 스터디 30일차 문제인 리트코드의 5번은 문자열에서 가장 긴 팰린드롬을 찾는 문제다. 난이도는 Medium이며 문자열 탐색을 통해 해결할 수 있다.
오늘의 문제 - XXX 문제 정보
문제 키워드
- 문자열
난이도
- Medium
문제 요약
- 영어와 숫자로만 이루어진 길이 1000 이하의 문자열 s가 주어진다.
- s의 substring 중 가장 긴 팰린드롬을 구하여라.
문제 풀이 과정
- 팰린드롬은 항상 홀수인 경우와 짝수인 경우의 계산이 달라 복잡하다. 따라서 두 경우를 나누어서 구하면 된다.
- 기준점을 잡고 좌우로 한칸씩 늘려가면서 팰린드롬인지 확인한다. 이에 따라 가장 긴 팰린드롬의 길이와 위치를 갱신한다.
코드
class Solution { public String longestPalindrome(String s) { int n = s.length(); int startIdx = 0, longest = 1; for(int mid = 1; mid < n; mid++) { // 1. 홀수 팰린드롬 int oddMax = 0; for(int dist = 1; mid-dist >= 0 && mid+dist < n; dist++) { if (s.charAt(mid-dist) != s.charAt(mid+dist)) { break; } oddMax++; } if (oddMax*2+1 > longest) { startIdx = mid-oddMax; longest = oddMax*2 + 1; } // 2. 짝수 팰린드롬 int evenMax = 0; for(int dist = 1; mid-dist >= 0 && mid+dist <= n; dist++) { if (s.charAt(mid-dist) != s.charAt(mid+dist-1)) { break; } evenMax++; } if (evenMax*2 > longest) { startIdx = mid-evenMax; longest = evenMax*2; } } return s.substring(startIdx, startIdx + longest); } }
- 시간복잡도: O(n^2)
- 공간복잡도: O(1)
728x90
'알고리즘 > 항해99 스터디' 카테고리의 다른 글
99클럽 코테 스터디 29일차 TIL - 문자열 (LeetCode 556번) (0) | 2024.06.18 |
---|---|
99클럽 코테 스터디 28일차 TIL - 배열 (LeetCode 2145번) (0) | 2024.06.17 |
99클럽 코테 스터디 27일차 TIL - 배열 (LeetCode 2861번) (0) | 2024.06.16 |
99클럽 코테 스터디 26일차 TIL - 배열, 이진탐색 (LeetCode 275번) (0) | 2024.06.14 |
99클럽 코테 스터디 25일차 TIL - 그래프 (LeetCode 1971번) (0) | 2024.06.13 |
댓글