思路:
时间复杂度O(N),空间复杂度O(N)。
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty()) return true;
vector<char> v;
for(int i = 0; i < s.size(); ++i) {
if(isalnum(s[i])) {
if(isalpha(s[i]))
v.push_back(tolower(s[i]));
else
v.push_back(s[i]);
}
}
int size = v.size();
for(int i = 0; i < size/2; ++i) {
if(v[i] != v[size-i-1]) return false;
}
return true;
}
};
优化:
时间复杂度O(N),空间复杂度O(1)。
class Solution {
public:
bool isPalindrome(string s) {
int start = 0;
int end = s.size() - 1;
while(start < end) {
while(start<end && !isalnum(s[start])) start++;
while(end>0 && !isalnum(s[end])) end--;
if(isalpha(s[start]) && tolower(s[start]) != tolower(s[end])) return false;
if(isdigit(s[start]) && s[start] != s[end]) return false;
start++;
end--;
}
return true;
}
};