그대로 읽나 반대로 읽나 같은지 확인한다.

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.