首页 > 代码库 > 回文字符串

回文字符串

 1 class Solution {  2 public:  3     bool isPalindrome(string s) {  4     //清空string内部所有不是字母的内容,要注意的是erase删除后返回其下一个元素,利用这点来连续删除,若使用i++则会导致运行时错误 5     for(string::iterator i=s.begin();i<s.end();)  6     {  7         if(!isalnum(*i))  8         {  9             i=s.erase(i); 10         } 11         else i++;12     } 13     //cout<<s<<endl;14     //空串约定为真15     if(s.size()==0) 16      return true; 17     //下面是一段朴素的判断回文字符串的例子,注意到大小写无关,所以调用了tolower函数18     string::iterator start = s.begin(); 19     string::iterator end = start+s.size()-1; 20      21     while (start <= end&&start!=s.end()&&end>s.begin()) 22     { 23         24         if (tolower(*start) == tolower(*end)) 25         { 26             start++; 27             end--; 28         } 29         else 30             return false; 31     } 32     return true; 33     }34 };

1. 首先要明确题目要求,它忽略所有不是字母的内容,比如 . 等标点,因此我们先过滤这些内容,通过string 的erase函数,但要利用erase的返回值来实现向前继续扫描,而不能单纯利用i++来实现;

2。 过滤好之后就是一个朴素的回文串判断了,题目要求大小写无关,所以我调用了tolower函数:小写字母不变,大写字母转为小写。

回文字符串