File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments