문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
어떤 구절이 대문자를 모두 소문자로 변환하고, 영숫자가 아닌 모든 문자를 제거했을 때 앞에서부터 읽으나 뒤에서부터 읽으나 동일하다면 이를 팰린드롬이라고 한다. 영숫자에는 알파벳 문자와 숫자가 포함된다.
문자열 s가 주어졌을 때, 팰린드롬이라면 true를, 그렇지 않다면 false를 반환해라.
#1
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama"는 팰린드롬이다.
#2
Input: s = "race a car"
Output: false
Explanation: "raceacar"는 팰린드롬이 아니다.
#3
Input: s = " "
Output: true
Explanation: s는 영숫자가 아닌 문자를 제거한 후에 비어있는 문자열 ""이다.
빈 문자열을 앞에서부터 읽으나 뒤에서부터 읽으나 동일하므로, 팰린드롬이다.
주어진 문자열 s를 특수문자를 없애고, 소문자로 바꿔준다. 그리고 투 포인트를 사용해 left와 right를 정한다. while문을 사용해서 left와 right를 차례로 비교한다. left와 right가 같아면 left는 증가, right는 감소시킨다. 그렇지 않다면 false를 반환한다.
아무 문제없이 while문을 빠져나온다면 true를 반환한다.
class Solution {
public boolean isPalindrome(String s) {
s = s.replaceAll("[^a-zA-Z0-9]+", "");
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while(left < right){
if(s.charAt(left) == s.charAt(right)){
left++;
right--;
}else{
return false;
}
}
return true;
}
}