题目:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例 2:
输入: "race a car" 输出: false
解答:
思路:既然是回文,那就是从前往后,和从后往前是一样,那就使用双指针同时往中间移动,比较是否相等;但这里有空格和标点符号影响比较,因此去掉空格和标点符号,并把每个字母都统一转换成小写;
缺点:以空间换时间,并且有多余的去除标点、空格的步骤;
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty())
return true;
string temp;
for(auto c:s)
{
//去除标点符号和空格,新建一个string
if(ispunct(c)||isspace(c))
continue;
temp+=tolower(c);
}
auto first=temp.begin();
auto last = temp.end();
//回文比较,两头夹逼
while((first!=last)&&(first!=--last))
{
if(*first++ != *last)
return false;
}
return true;
}
};