0%

valid-palindrome

题目描述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

题解

头文件:#include <ctype.h>

isalnum() 用来判断一个字符是否为英文字母或数字,相当于 isalpha(c) || isdigit(c),其原型为:

1
int isalnum(char c);

c 为需要检测的字符。若 c 为 0 ~ 9 a ~ z A ~ Z 则返回非 0,否则返回 0。isalnum()为宏定义,不是真正的函数。

C++ STL string 大小写转换:

1
2
3
string str = "abcdADcdeFDde!@234";
transform(str.begin(), str.end(), str.begin(), ::toupper);
transform(str.begin(), str.end(), str.begin(), ::tolower);
1
2
3
4
5
6
7
8
9
10
11
12
13
bool isPalindrome(string s) {
bool res = true;
int i = 0, j = s.length() - 1;
transform(s.begin(), s.end(), s.begin(), ::toupper);
while (i < j)
{
while (i<j&&!isalnum(s[i]))i++;
while (i<j&&!isalnum(s[j]))j--;
if (s[i] != s[j])return false;
i++; j--;
}
return res;
}