给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
样例
"A man, a plan, a canal: Panama"
是一个回文。
"race a car"
不是一个回文。
#include <iostream> using namespace std; /* 给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。 注意事项 1.你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。 2.在这个题目中,我们将空字符串判定为有效回文。 样例 "A man, a plan, a canal: Panama" 是一个回文。 "race a car" 不是一个回文。 */ class Solution { public: bool check(char ch) { if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')) return false; return true; } bool isPalindrome(string &s) { if (s.empty()) return true; int size = s.size(); int end = size - 1; int begin = 0; while (begin < end) { while (end >= 0 && check(s[end])) { --end; } while (begin < size && check(s[begin])) { ++begin; } if (tolower(s[end]) != tolower(s[begin])) return false; else --end, ++begin; } return true; } }; int main() { Solution solution; string str = "A"; bool isMatch = solution.isPalindrome(str); cout << "isMatch==" << isMatch << endl; return 0; }