125. Valid Palindrome

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

 

思路:有效回文。需要一个指向头部的变量和指向尾部的变量,从字符串的两边来遍历,遇到除字母和数字以外的字符则跳过,如果遍历完整个字符串后前后字母都能匹配上,则是回稳返回true.注意:空串也是回文。

        需要注意的几点:1、对大小写不敏感,需要把所有字母小写都转换成大写,或者大写都转换成小写,用toupper()函数。

                               2、遇到非字母、数字要跳过,用到isalnum()函数

 1 #include <iostream>
 2 #include "ctype.h"
 3 using namespace std;
 4 
 5 bool isPalindrome(string s)
 6 {
 7     int first,last;
 8     first = 0;
 9     last = s.size() - 1;
10     while (first <= last)
11     {
12         while (!(isalnum(s[first])) && first < last)
13         {
14             first++;
15         }
16         while (!(isalnum(s[last])) && first < last)
17         {
18             last--;
19         }
20         if (toupper(s[first]) != toupper(s[last]))
21         {
22             return false;
23         }
24         first++;
25         last--;
26     }
27     return true;
28 }
29 
30 void main()
31 {
32     string s = "A man, a plan, a canal: Panama";
33     bool m = isPalindrome(s);
34     cout << m << endl;
35     system("pause");
36 }

 

posted @ 2016-06-24 16:52  泥石流小盆友  阅读(746)  评论(0编辑  收藏  举报