https://leetcode.com/problems/valid-palindrome/?envType=study-plan-v2&envId=top-interview-150
Palindrome
을 찾는 문제다.
Palindrome : 거꾸로 읽어도 동일한 단어를 말함.
토마토가 대표적인 예시다.
몇 가지 프로세스를 진행해야 한다.
isPalindrome = true
alphanumeric
이 아니면 무시한다.alphanumeric : 숫자나, 알파벳을 말함.
A man, a plan, a canal: Panama
// 1. if(공백 or 1글자?) = false
// 2. 숫자나 알파벳이 아닌 단어는 무시 => amanaplanacanalpanama
// 3. Palindrome 검증 = true
굳이 그렇게는 안해도 된다. 탐색 인덱스에 위치한 char가 숫자나 알파벳이 아니면 다음 탐색 인덱스로 넘어가면 그만이다.
class Solution {
public boolean isPalindrome(String s) {
if (s.isEmpty()) {
return true;
}
int leftIndex = 0;
int rightIndex = s.length() - 1;
while (leftIndex < rightIndex) {
char leftChar = s.charAt(leftIndex);
char rightChar = s.charAt(rightIndex);
if (!Character.isLetterOrDigit(leftChar)) {
leftIndex++;
} else if (!Character.isLetterOrDigit(rightChar)) {
rightIndex--;
} else {
if (Character.toLowerCase(leftChar) != Character.toLowerCase(rightChar)) {
return false;
}
leftIndex++;
rightIndex--;
}
}
return true;
}
}