给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
bool isPalindrome(char * s){
int len = strlen(s);
char *hash = (char *)calloc(len,sizeof(char));
int hashlen = 0;
int i , j;
for(i = 0 , j = 0; i < len ; i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
hash[j] = s[i];
j++;
}
else if(s[i] >= 'a' && s[i] <= 'z')
{
hash[j] = s[i];
j++;
}
else if(s[i] >= '0' && s[i] <= '9')
{
hash[j] = s[i];
j++;
}
}
i = 0,j -= 1;
while(i <= j)
{
if(hash[i] >= 'a' && hash[i] <= 'z')
{
if(hash[i] == hash[j] || hash[i] == hash[j] + 32)
{
i++;
j--;
}
else break;
}
else if(hash[i] >= 'A' && hash[i] <= 'Z')
{
if(hash[i] == hash[j] || hash[i] == hash[j] - 32)
{
i++;
j--;
}
else break;
}
else if(hash[i] >= '0' && hash[i] <= '9')
{
if(hash[i] == hash[j])
{
i++;
j--;
}
else break;
}
}
if(i >= j) return true;
else return false;
}
思路:先筛选,再首尾指针逐个判断。注意内存空间的申请问题。