Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"is a palindrome.
"race a car"is not a palindrome.Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.For the purpose of this problem, we define empty string as valid palindrome.
tag: two-pointers, string
简单题,处理前先把字符串提纯一下–删掉非数字字母字符,并将大写字符转换成小写。
然后用双指针算法。
注意:我已经习惯用cpp解题。一开始用c时完全捉襟见肘。
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty()){
return true;
}
s = refine(s);
int l = s.size() - 1;
int i = 0;
while(i <= l){
if(s[i] != s[l]){
return false;
}
i++;
l--;
}
return true;
}
string refine(string s){//delete non-alphanumeric characters and lower the letters
string ns;
for(int i = 0; i < s.size(); i++){
char c = s[i];
if(c >= '0' && c <= '9'){//number
ns.push_back(c);
}
else if(c >= 'a' && c <= 'z'){//lowercase letter
ns.push_back(c);
}
else if(c >= 'A' && c <= 'Z'){//uppercase letter
ns.push_back(c - 'A' + 'a');
}
}
return ns;
}
};
