给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
========================================================================================================================================================================================
分析:
跳过非字母和数字的字符,再将大写的字母转换成小写进行比较
//判断是否是数字和字母
//当为字母和数字时,返回为真,否则返回假
bool isNumChar(char a)
{
return ((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z') || (a >= '0' && a <= '9'));
}
//转换成小写
char low(char s)
{
if((s>='a' && s<='z')||(s>='0' && s<='9'))
{
return s;
}
return s+32;
}
bool isPalindrome(char * s){
if(s == NULL)
{
return 0;
}
if(strlen(s) == 0)
{
return 1;
}
int len = strlen(s);
int i=0;
while(i <= len)
{
//过滤数字和字母
if(!isNumChar(s[i]))
{
i++;
continue;
}
if(!isNumChar(s[len]))
{
len--;
continue;
}
//转换小写
if(low(s[i]) != low(s[len]))
{
return 0;
}
i++;
len--;
}
return 1;
}