lintcode程序员

415. 有效回文串

2018-01-25  本文已影响9人  和蔼的zhxing

给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。

注意事项

你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。

在这个题目中,我们将空字符串判定为有效回文。

样例

"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。
>,>=,<,<=;   //不等式关系运算符
上一篇 下一篇

猜你喜欢

热点阅读