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