Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions valid-palindrome/ICE0208.java

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Two Pointers, Greedy
  • 설명: 두 포인터(left, right)를 양 끝에서 움직이며 조건에 맞는 문자를 비교하는 대표적인 패턴이다. 알파벳/숫자 제거와 소문자 변환 후 대칭 여부를 확인한다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(1)

피드백: 대소문자 무시 및 알파벳/숫자 문자만 검토하도록 필터링하고, 불필요한 문자를 건너뛴다. 모든 비교는 상수 시간에 이루어진다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class Solution {

public boolean isPalindrome(String s) {
/*
* 문제에서는 대소문자를 구분하지 않고,
* 알파벳과 숫자만 남긴 뒤 팰린드롬인지 확인한다.
*
* Character.isLetterOrDigit(ch)는
* 현재 문자가 알파벳 또는 숫자인지 확인하는 함수다.
* 공백, 쉼표, 콜론 같은 문자는 비교 대상이 아니므로 건너뛴다.
*
* 입력은 printable ASCII 문자로 제한되어 있으므로
* charAt()으로 한 문자씩 확인해도 된다.
*
* 시간 복잡도: O(n)
* 공간 복잡도: O(1)
*/
int left = 0;
int right = s.length() - 1;

while (left < right) {
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left++;
}

while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right--;
}

char leftChar = Character.toLowerCase(s.charAt(left));
char rightChar = Character.toLowerCase(s.charAt(right));

if (leftChar != rightChar) {
return false;
}

left++;
right--;
}

return true;
}
}
Loading