1.描述
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.
2.分析
3.代码
bool check(char ch) {
return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9' ? true : false;
}
bool isPalindrome(char* s) {
if (NULL == s) return false;
if ("" == s) return true;
int length = strlen(s);
int begin = 0;
int end = length - 1;
while (begin < end) {
while (!check(s[begin]) && begin <= end) ++begin;
while (!check(s[end]) && begin <= end) --end;
if (begin > end) return true;
char ch1 = isupper(s[begin]) ? s[begin] : s[begin] - 32;
char ch2 = isupper(s[end]) ? s[end] : s[end] - 32;
if (ch1 != ch2) return false;
++begin;
--end;
}
return true;
}