给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
样例
"A man, a plan, a canal: Panama"
是一个回文。
"race a car"
不是一个回文。
先处理再判定
忽略掉标点和空格,然后再判定是否是回文串。题目要求忽略大小写,所以把字母全部转换为大写或者小写。
isalnum(c)
可以判断是否为数字或者字母。
toupper(c)
如果c是小写,转换为大写。否则原样输出。
tolower(c)
如果c是大写,转换为小写。否则原样输出。
另外,考虑特殊情况空字符串认为是回文串。
bool isPalindrome(string &s) {
if(s.empty())
return true;
string res;
for(auto ss:s)
{
if(isalnum(ss))
res+=toupper(ss);
}
auto beg=res.begin();
auto end=res.end()-1;
for(int i=0;i<res.size()/2;i++)
{
if(*(beg+i)!=*(end-i))
return false;
}
return true;
// write your code here
}
note另外,正向迭代器和反向迭代器是不能比较大小的,但是同一种有时候是可以比较的。
对于string和vector的迭代器,支持以下操作:
标准容器迭代器支持的操作:
*iter;
iter->mem;
iter++;
iter--;
iter1==iter2;
iter1!=iter2;
vector和string的迭代器还支持更多的操作:
iter+n;
iter-n;
iter+=n;
iter-=n;
iter1-iter2; //返回的是一个difference_type,可以赋值给int。
>,>=,<,<=; //不等式关系运算符
网友评论