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