给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
来源:力扣(LeetCode)
bool isPalindrome(char* s)
{
int len = strlen(s);
char* ans = (char*)malloc((len+1) * sizeof(char));//创建个新的用来保存除去其他因素之外的
assert(ans != NULL);
int j = 0;
int i;
for (i = 0; i<len; i++)
{
if (isalpha(s[i]))//是否字母
{
if (isupper(s[i]))//是否大写 大写转小写并保存
{
ans[j++] = tolower(s[i]);
}
else
{
ans[j++] = s[i];//到这说明肯定是小写,同样保存
}
}
else if(isdigit(s[i]))//数字同样保存
{
ans[j++]=s[i];
}
}
ans[j] = '\0';
int last = strlen(ans)-1;//为从后往前遍历做准备
for (int i = 0; i <=last ; i++)
{
if (ans[i] != ans[last])//最前面和最后面做比较 不同直接false
{
return false;
}
last--;//last记得--
}
return true;//能出来说明可能回文
}