以元封不动的对原字符串进行回文的判断
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
解释:“amanaplanacanalpanama” 是回文串
示例 2:
输入: “race a car”
输出: false
解释:“raceacar” 不是回文串
在做这类题之前我们要熟悉C++ 中的常用的字符判断的内置函数:
做题思想:
这道题的主要思想就是用到了双指针算法思想,只是在我们遇到空格与数字啥的其他字符时 跳过即可,简言之只要不是字母,跳过!剩下的就交给常规的双指针思想解决即可。
代码实现:
bool isPalindrome(string s) {
int right = s.size(), left = 0;
while ( left < right)
{
while (left < right && !isalnum(s[left]))
{
left++;
}
while (left < right && !isalnum(s[right]))
{
right--;
}
if (left < right )
if ( tolower(s[left]) != tolower(s[right]))
{
return false;
break;
}
left++;
right--;
}
return true;
}