Skip to content

Commit a230922

Browse files
Panlindromic substrings solution
1 parent 6b783a7 commit a230922

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

palindromic-substrings/jaejeong1.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
}

0 commit comments

Comments
 (0)