주어진 문자열을 기준으로 앞으로 읽어도, 뒤로 읽어도 똑같다면 true,
다르다면 false 를 리턴해라.
(띄어쓰기, 쉼표, 콜론 등 무시!)
투포인터로 접근하였다.
우선 문자열을 1차 가공을 한다.
문자열이 영어이거나 숫자라면 새로운 문자열에 소문자로 추가한다.
이때 공백, 쉼표, 콜론 등은 제거된다.
이렇게 1차 가공된 문자열은 순수하게 영어단어와 숫자로만 이루어진다.
문자열 탐색을 위한 왼쪽 인덱스와 오른쪽 인덱스를 둔다.
(leftIndex = 0, rightIndex = 문자열의 길이 -1)
반복문을 돌면서 charAt으로 뜯어온 두 문자가 같지 않다면 false를 리턴하면서 종료한다.
공간 복잡도와 시간 복잡도를 더 줄이기 위해선 탐색의 조건이 아닌 값들을 반복문에서 제외하면 될 것 같다.
public boolean isPalindrome(String s) {
StringBuilder change = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char check = s.charAt(i);
if (Character.isLetter(check) || Character.isDigit(check)) {
change.append(String.valueOf(check).toLowerCase());
}
}
int leftIndex = 0;
int rightIndex = change.length() - 1;
while (leftIndex < rightIndex) {
if (change.charAt(leftIndex++) != change.charAt(rightIndex--)) {
return false;
}
}
return true;
}
