Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14003
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-04 14:30
个人简介

programmer and engineer

文章分类

全部博文(7)

文章存档

2013年(7)

我的朋友

分类: C/C++

2013-03-05 17:03:59

给定一字符串,输出其是否为回文。只考虑字母字符和数字,并且忽略大小写。

例如:

“A man, a plan, a canal: Panama”,结果应为是,因为若去掉所有非字母和数字的字符,如空格,逗号,则为“AmanaplanacanalPanama”,加上忽略大小写,可见其是一个回文串。

这道题的关键是比较字符串两端的时候应忽略非字母和数字的字符,并忽略大小写,可以将字符都转为小写比较即可(如用tolower)。

另一种特殊情况是空串,即不包含任何字母数字的字符串,如“ ”,或“ , ”,我们这里定义空串为回文,应返回true。

解法如下:

   1: class Solution { 
   2: public: 
   3:     bool isPalindrome(string s) 
   4:     { 
   5:         int len = s.size(); 
   6:         int head = len-1; 
   7:         int tail = 0;
   8:  
   9:         while (head >= tail) { 
  10:             while( !isalnum(s[head]) && head >= tail ) 
  11:                 head--; 
  12:             while( !isalnum(s[tail]) && head >= tail ) 
  13:                 tail++;
  14:  
  15:             if (!isalnum(s[head]) || (head < tail)) 
  16:                 return true;
  17:  
  18:             //cout<
  19:             if (tolower(s[head]) != tolower(s[tail])) 
  20:                 return false; 
  21:             head--; 
  22:             tail++; 
  23:         } 
  24:         return true; 
  25:     } 
  26: };
阅读(325) | 评论(0) | 转发(0) |
0

上一篇:A1: Palindrome number

下一篇:A3: 实现strStr

给主人留下些什么吧!~~