그대로 읽나 반대로 읽나 같은지 확인한다.
https://leetcode.com/problems/valid-palindrome/
문제에서는 일반적인 문자를 제외한 space , "," , : 같은 기호도 사용해서 찾는걸 방해한다!
tolower로 소문자로 바꾸고, compare로 걸러주고 해결했다.
bool compare(char& c)
{
if (c >= 'a' && c <= 'z') return true;
if (c >= '0' && c <= '9') return true;
return false;
}
class Solution {
public:
bool isPalindrome(string s) {
int left = 0;
int right = s.size() - 1;
while (left <= right)
{ //같다면 !
char lowLeft = tolower(s[left]);
char lowRight = tolower(s[right]);
if (lowLeft == lowRight)
{
left++;
right--;
}
else // 다르면
{//둘 다 범위 안에 들어오는 char인데도 틀렸으니 false
if (compare(lowLeft) && compare(lowRight))
return false;
else if (!compare(lowLeft))
{
left++;
}
else if (!compare(lowRight))
{
right--;
}
}
}
return true;
}
};
Runtime: 4 ms, faster than 96.03% of C++ online submissions for Valid Palindrome.
Memory Usage: 7.4 MB, less than 91.89% of C++ online submissions for Valid Palindrome.