Skip to content

Commit bb9b733

Browse files
committed
Palindromic Substrings Solution
1 parent 40bae91 commit bb9b733

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* 주어진 문자열에서 팰린드롬(앞뒤로 읽어도 같은 문자열)인 부분 문자열의 개수를 구하는 문제
3+
*
4+
* 투 포인터(Two Pointers) vs. 중심확장(Center Expansion)
5+
* 투포인터: 보통 정렬된 배열에서 두 요소의 합을 찾는 등에 사용
6+
*
7+
* 중심확장이 더 적합한 이유:
8+
* 팰린드롬의 특성(중심 대칭)을 직접적으로 활용
9+
* 불필요한 비교 최소화
10+
* 구현이 간단하고 이해하기 쉬움
11+
*
12+
* 이번 문제는: Center Expansion 방법으로 접근
13+
* 모든 부분 문자열을 확인해야 함
14+
* 각 위치에서 팰린드롬 가능성을 체크해야 함
15+
*
16+
* 시간 복잡도: O(n²) - 각 중심에서 최대 n번 확장
17+
* 공간 복잡도: O(1) - 추가 공간 거의 불필요
18+
*/
19+
/**
20+
* @param {string} s
21+
* @return {number}
22+
*/
23+
var countSubstrings = function (s) {
24+
if (!s || s.length === 0) return 0; // 빈 배열이면 빠른 리턴
25+
26+
let count = 0;
27+
const n = s.length;
28+
29+
// 중심 확장 함수
30+
function expandAroundCenter(left, right) {
31+
while (left >= 0 && right < n && s[left] === s[right]) {
32+
count++;
33+
left--;
34+
right++;
35+
}
36+
}
37+
38+
for (let i = 0; i < n; i++) {
39+
// 홀수 길이 팰린드롬
40+
expandAroundCenter(i, i);
41+
// 짝수 길이 팰린드롬
42+
expandAroundCenter(i, i + 1);
43+
}
44+
45+
return count;
46+
};

0 commit comments

Comments
 (0)