647. Palindromic Substrings
Problem
Given a string s, return the number of palindromic substrings in it.
A string is a palindrome when it reads the same backward as forward.
A substring is a contiguous sequence of characters within the string.
Example
Input: s = "abc"
Output: 3
Explanation: Three palindromic strings: "a", "b", "c".
[1] Code (21. 08. 22)
Need to Retry
class Solution {
public int countSubstrings(String s) {
int ans = 0;
final char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
for (int j = i; j < chars.length; j++) {
if (isPalindrom(chars, i, j)) {
ans++;
}
}
}
return ans;
}
private boolean isPalindrom(char[] chars, int st, int end) {
while (st <= end) {
if (chars[st] != chars[end]) {
return false;
}
st++;
end--;
}
return true;
}
}
Algorithm Description
-
input의 n값을 보고 $O(N^2)$ 으로 풀어도 되겠구나 싶어서 $O(N^2)$으로 풀었다.
하지만 이게 베스트는 아니었음은 알고 풀었다.
Reference Code
Review
-
다양한 접근 방법이 있어서 다른 분들의 코드를 보는 데 시간이 오래 걸렸다.
Palindrom은 잘 알려진 문제이지만 볼 때마다 새롭다.
[2] Code (21. 10. 24)
Need to Retry -> 만족스럽지 못한 나의 풀이
class Solution {
public int countSubstrings(String input) {
List<String> ans = new ArrayList<>();
for (int i = 0; i < input.length(); i++) {
go(input, "", ans, i);
}
return ans.size();
}
private void go(String input, String s, List<String> ans, int idx) {
if (input.length() == idx) {
if (isPalindrom(s)) {
ans.add(s);
}
return;
}
if (isPalindrom(s)) {
ans.add(s);
}
go(input, s + input.charAt(idx), ans, idx + 1);
}
private boolean isPalindrom(String s) {
if (s.equals("")) {
return false;
}
int left = 0;
int right = s.length() - 1;
while (left <= right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
Concern Point
String의 equals( ) 철자
equlas 철차를 제대로 몰라서 컴파일 에러 발생
String에서 특정 Index의 값 가져오는 방법
string.charAt( )
String의 길이를 구하는 메소드 사용법
string.length( )
// length인지 length( )인지 자꾸 헷갈린다 -ㅂ-
Reference Code
FeedBack
-
매우 많은 부분에서 막혔다.
여러가지로 기본기가 부족함을 많이 느끼게 해준 문제이다.
Review
-
30분 소요
-
스스로 힘으로 맞아서 기쁘나 시간/공간 복잡도가 굉장히 안 좋다.
다시 풀어보도록 하자 !