给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串
示例 2:
输入: "race a car"
输出: false
解释:"raceacar" 不是回文串
提示:
1 <= s.length <= 2 * 105
字符串 s 由 ASCII 字符组成
第一种解法:双指针,另外还有两种解法 栈,reverse 略
bool is_char(char s)
{
if((s >= 'a' && s <= 'z') || (s >= 'A' && s <= 'Z'))
return true;
else
return false;
}
bool is_valid_char(char s)
{
if((s >= '0' && s <= '9') || is_char(s))
return true;
else
return false;
}
bool isPalindrome(char * s){
int left = 0;
int right = strlen(s) - 1;
while(left < right)
{
if(!is_valid_char(s[left]))
{
left++;
continue;
}
if(!is_valid_char(s[right]))
{
right--;
continue;
}
if(s[left] != s[right])
if(32 == s[left] - s[right] || -32 == s[left] - s[right])
{
if(is_char(s[left]) && is_char(s[right]))// 不加这个判断 类似 "0P"会误判
{
left++;
right--;
continue;
}
else
return false;
}
else
return false;
else
{
left++;
right--;
}
}
return true;
}