문제 출처:https://leetcode.com/problems/valid-palindrome/
문제 분석
말 그대로 non-alphanumeric 영문자가 아닌 글자들을 제외한 문자열을 소문자로 둘때, 양쪽이 종이접듯이 같은 배열을 가지고 있으면 true 그렇지 않다면 false를 출력하는 문제입니다. c++에서는 isalpha와 isdigit라는 함수를 지원해주는데 각각 알파벳인지아닌지, 숫자인지 아닌지를 알려줍니다. 아닌 문자는 제거해야하기 때문에 저는 shift를 해서 넘겨주었습니다. 각각 비교하여 같지 않다면 false로 업데이트하게끔 만들었습니다.
코드는 다음과 같습니다:
class Solution {
public:
bool isPalindrome(string s) {
bool answer = true ;
int left = 0, right = s.length()-1 ;
while(left < right){
if(!isalpha(s[left]) && !isdigit(s[left])){
left ++ ;
continue ;
}
if(!isalpha(s[right]) && !isdigit(s[right])){
right -- ;
continue ;
}
if(tolower(s[left++]) != tolower(s[right--])){
answer = false ;
break ;
}
}
return answer ;
}
};
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/LeetCode/P125_Valid_Palindrome.cpp
훈수 및 조언은 언제든 환영입니다.