思路:
- 只保存字母数字;
- 全部转化为大写字母;
- 判断是否是回文(比较 s[begin] 与s[end] 是否相等)。
class Solution { public: bool isLetterOrNumber(char ch) { return (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || (ch>= '0' && ch<='9'); } bool isPalindrome(string s) { for(auto& ch:s) { if(ch>='a' && ch<='z') { ch-=32; } } int begin=0,end=s.size()-1; while(begin<end) { while(begin<end && !isLetterOrNumber(s[begin])) { ++begin; } while(begin<end && !isLetterOrNumber(s[end])) { --end; } if(s[begin] !=s[end]) { return false; } else { ++begin; --end; } } return true; } };