回文字符串

 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函数:小写字母不变,大写字母转为小写。

转载于:https://www.cnblogs.com/gaoduan/p/4055229.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值