验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
法①
class Solution {
public:
bool isPalindrome(string s) {
string str;
for (int i=0;i<s.size();i++) {
if (isalnum(s[i])) {
if(s[i] >= 'A'&&s[i] <= 'Z') //将大写字母转换成小写字母
s[i] += 32;
str+=s[i];
}
}
string str1=str;
reverse(str.begin(),str.end());
return str==str1;
}
};
其中标准 ASCII 编码共包含了 128 个字符,不同的字符属于不同的分类,在 <ctype.h> 头文件中。
islower(char c) 是否为小写字母
isupper(char c) 是否为大写字母
isdigit(char c) 是否为数字
isalpha(char c) 是否为字母
isalnum(char c) 是否为字母或者数字
toupper(char c) 字母小转大
tolower(char c) 字母大转小
法②:双指针
class Solution {
public:
bool isPalindrome(string s) {
string str;
for (int i=0;i<s.size();i++) {
if (isalnum(s[i])) {
if(s[i] >= 'A'&&s[i] <= 'Z') //将大写字母转换成小写字母
s[i] += 32;
str+=s[i];
}
}
int n = str.size();
int left = 0, right = n - 1;
while (left < right) {
if (str[left] != str[right]) {
return false;
}
++left;
--right;
}
return true;
}
};