分类: 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: };