File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ class SolutionPalindromicSubstrings {
2
+ // 1번쨰 풀이: 구현해야할 로직을 팰린드롬 여부 검사와 검사할 대상 문자열을 구하는 로직 둘로 나눈다
3
+ // 팰린드롬 여부 검사: 투포인터 사용, lt=0, rt=length-1 로 시작해 동등성 여부를 검사
4
+ // 시간복잡도: O(N), 공간복잡도: O(1)
5
+ // 대상 문자열 구하기: 투포인터 사용. rt가 length보다 같거나 작을떄까지 계속 증가시키고,
6
+ // rt가 끝에 도달하면 lt를 증가시키고, rt를 lt+1로 만든다. 모든 과정에서 팰린드롬 여부를 검사한다
7
+ // 시간복잡도: O(N), 공간복잡도: O(1)
8
+ // 결과
9
+ // 시간복잡도: O(N), 공간복잡도: O(1)
10
+
11
+ public int countSubstrings (String s ) {
12
+ var subStrings = s .toCharArray ();
13
+
14
+ if (subStrings .length == 0 ) return 0 ;
15
+ if (subStrings .length == 1 ) return 1 ;
16
+
17
+ var answer = 0 ;
18
+
19
+ var lt = 0 ;
20
+ var rt = 1 ;
21
+ while (lt < subStrings .length ){
22
+ if (isPalindrome (s .substring (lt , rt ))) {
23
+ answer ++;
24
+ }
25
+
26
+ if (rt <= subStrings .length -1 ){
27
+ rt ++;
28
+ } else {
29
+ lt ++;
30
+ rt = lt +1 ;
31
+ }
32
+ }
33
+
34
+ return answer ;
35
+ }
36
+
37
+ private boolean isPalindrome (String s ) {
38
+ var chars = s .toCharArray ();
39
+ var lt = 0 ;
40
+ var rt = chars .length - 1 ;
41
+
42
+ while (lt < rt ) {
43
+ if (chars [lt ] != chars [rt ]) {
44
+ return false ;
45
+ }
46
+ lt ++;
47
+ rt --;
48
+ }
49
+
50
+ return true ;
51
+ }
52
+ }
You can’t perform that action at this time.
0 commit comments