https://leetcode.com/problems/valid-palindrome
- 회문은 뒤에서부터 읽는 것과 앞에서부터 읽는 것과 동일하다.
➡️ 포인터를 앞 뒤로 둬서 순차적으로 짝이 맞는지 검사하자🧐 투 포인터를 이용하자
left = 0
right = 마지막 인덱스
while(left < right){
왼쪽 문자 = s.charAt(left)
오른쪽 문자 = s.charAt(right)
if(왼쪽 문자가 유효하지 않음){
left++
continue
}
if(오른쪽 문자가 유효하지 않음){
right--
continue
}
if(a == b) {
left++
right--
} else {
return false
}
}
return true
public boolean isPalindrome(String s) {
if (s.isEmpty()) {
return true;
}
int start = 0;
int last = s.length() - 1;
while(start <= last) {
char currFirst = s.charAt(start);
char currLast = s.charAt(last);
if (!Character.isLetterOrDigit(currFirst )) {
start++;
} else if(!Character.isLetterOrDigit(currLast)) {
last--;
} else {
if (Character.toLowerCase(currFirst) != Character.toLowerCase(currLast)) {
return false;
}
start++;
last--;
}
}
return true;
}
Character.isLetterOrDigit()
이라는 java 내장 함수가 있어서 이걸 활용하면 좀 더 간결하게 코드를 작성할 수 있을 것 같다.
또 왼쪽 문자와 오른쪽 문자가 동일한지 체크하는 로직을 else 문 뒤에 넣어 continue
없이 while 문을 구성했다.