给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。
bool isPalindrome(char * s){
if(s == NULL)
{
return true;
}
bool flag = true;
bool out = false;
int len = strlen(s);
char *str = (char*)malloc(sizeof(char) * len);
memcpy(str, s, sizeof(char) * len);
for(int i = 0, j = len-1; i < j; i++, j--)
{
while(!((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= '0' && s[i] <= '9')))
{
if(++i >= j)
{
out = true;
break;
}
}
while(!((s[j] >= 'a' && s[j] <= 'z') || (s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= '0' && s[j] <= '9')))
{
if(--j <= i)
{
out = true;
break;
}
}
if(s[i] >= 'a' && s[i] <= 'z')
{
str[i] -= 32;
}
if(s[j] >= 'a' && s[j] <= 'z')
{
str[j] -= 32;
}
if(str[i] - str[j] != 0 && !out)
{
flag = false;
break;
}
}
return flag;
}
思路:主要先让非字母和数字的字符去掉或者跳过,然后判断首尾的字符是否相等,还要注意不区分大小写