如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
示例 3:
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。
思路分析:
1.写一个函数my_isDigPha判断字符是否是字母数字,如果大写需要转换为小写;
2.设置一前一后2个指针,跳过非字母数字的字符,然后对比2个字符是否相同,如果存在不相同的那就不是回文串。
int my_isDigPha(char *s)
{
if((*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || (*s >= '0' && *s <= '9'))
{
if(*s >= 'A' && *s <= 'Z')
{
*s += 32;
}
return 1;
}
else
{
return 0;
}
}
bool isPalindrome(char* s)
{
int i = 0;
int j = strlen(s) - 1;
while(i <= j)
{
/*跳过非字母数字字符*/
if((my_isDigPha(&s[i]) != 0) && (my_isDigPha(&s[j]) != 0))
{
if(s[i] != s[j])
{
return false;
}
i++;
j--;
}
else
{
if(my_isDigPha(&s[i]) == 0)
{
i++;
}
if(my_isDigPha(&s[j]) == 0)
{
j--;
}
}
}
return true;
}