给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
代码:
bool isPalindrome(char * s){
if(strlen(s)==0||strlen(s)==1)//先解决字符串长度为0或1的特殊情况
return 1;
int first=0,last=strlen(s)-1;//定义两个变量
while(first<last)//采用双指针的方法,first从字符串头部遍历,last从字符串尾部遍历,循环终止的条件是当first>=last,即两指针相遇
{
while((s[first]<'0'||(s[first]>'9'&&s[first]<'A')||(s[first]>'Z'&&s[first]<'a')||s[first]>'z'))//左指针跳过标点符号
{
first++;
if(first>last)
return 1;//判断该字符串是否全为标点符号
}
while((s[last]<'0'||(s[last]>'9'&&s[last]<'A')||(s[last]>'Z'&&s[last]<'a')||s[last]>'z'))
last--;//右指针跳过标点符号
if(s[first]==s[last]||(s[first]-s[last]==32&&s[last]>'9'&&s[first]>'9')||(s[last]-s[first]==32&&s[last]>'9'&&s[first]>'9'))//判断左指针与右指针是否相为同一个数字或字母
{
first++;//条件成立,循环进行下一个比较
last--;//条件成立,循环进行下一个比较
}
else
{
return 0;//条件不成立,布尔值为0
}
}
return 1;//循环全部进行完毕,证明该字符串是回文串,布尔值为1
}