참고
문제해설
문제 로직고민
NOTE
•
제공 받은 문자열이 회문이라면, 중앙을 지점으로 대칭되는 문자열 끼리 같아야한다.
◦
ex) bob의 경우 처음과 끝의 b가 같다.
◦
시작과 끝 idx를 계속해서 비교해서 둘의 포인터가 엇갈리거나 겹치는 순간까지 같다면 그 문자열은 팰린드롬이다.
•
만약 순회하는 문자가 영어나 숫자가 아니라면, 다음 문자로 넘어간다.
◦
단 넘어갈때, idx는 시작 idx가 끝 idx보다 항상 작아야한다.
작성코드
NOTE
class Solution {
public boolean isPalindrome(String s) {
int startIdx = 0;
int lastIdx = s.length() - 1;
char[] array = s.toCharArray();
while(startIdx < lastIdx){
while(startIdx < lastIdx
&& !Character.isAlphabetic(array[startIdx])
&& !Character.isDigit(array[startIdx])){
startIdx++;
}
while(startIdx < lastIdx
&& !Character.isAlphabetic(array[lastIdx])
&& !Character.isDigit(array[lastIdx])){
lastIdx--;
}
if(Character.toUpperCase(array[startIdx++]) != Character.toUpperCase(array[lastIdx--])) return false;
}
return true;
}
}
Java
복사
정답코드
NOTE
class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
char leftChar = s.charAt(left);
char rightChar = s.charAt(right);
if (!Character.isLetterOrDigit(leftChar)) {
left++;
continue;
}
if (!Character.isLetterOrDigit(rightChar)) {
right--;
continue;
}
if (Character.toLowerCase(leftChar) != Character.toLowerCase(rightChar)) {
return false;
}
left++;
right--;
}
return true;
}
}
Java
복사
메모리를 가장 적게 사용하는 코드
•
큰 로직은 동일하나 더 효율적으로 작성한 부분이 보인다.
◦
charArray를 만들지 않고, charAt을 사용함
◦
문자와 숫자를 판별할때 isLetterOrDigit() 통합함수 사용