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.
判断一个字符串是不是回文。只考虑字母且不分大小写。例如:
"A man, a plan, a canal: Panama" 是回文。
"race a car" 不是回文。
说明:
是否考虑到字符串为空?我们定义空字符串为回文。
分析:
先找到字符串结尾为止,然后两端同时扫描比较,只对合法字符进行比较,其他字符跳过。
bool isPalindrome(char* s) {
char *pstart = s;
char *pend = s;
if(NULL == s || '\0' == *s) /*空指针或空字符串*/
return true;
while(*pend)/*找到结尾有效字符*/
{
++pend;
}
--pend;
while(pstart < pend)
{
if((*pstart < 'a' || *pstart > 'z') && (*pstart < 'A' || *pstart > 'Z') && (*pstart < '0' || *pstart > '9'))/*不合法字符,不比较*/
{
++pstart;
continue;
}
if((*pend < 'a' || *pend > 'z') && (*pend < 'A' || *pend > 'Z') && (*pend < '0' || *pend > '9'))
{
--pend;
continue;
}
if((*pstart >= '0' && *pstart <= '9') || (*pend >= '0' && *pend <= '9'))
{
if(*pstart++ != *pend--)
return false;
}
else if(tolower(*pstart++) != tolower(*pend--))
{
return false;
}
}
return true;
}