class Solution { public: bool isPalindrome(string s) { // Note: The Solution object is instantiated only once and is reused by each test case. int i=0, j=s.size()-1; while (i<j) { while (i<j && (!((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z') || (s[i]>='0' && s[i]<='9')))) { i++; } if (i>=j) return true; while (!((s[j]>='a' && s[j]<='z') || (s[j]>='A' && s[j]<='Z') || (s[j]>='0' && s[j]<='9'))) { j--; } if (!(s[i]==s[j] || s[i]==s[j]-'A'+'a' || s[i]-'A'+'a'==s[j])) { return false; } i++; j--; } return true; } };