题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
思路
1.注意索引越界
2.ASCII a(97) - A(65) = 32
实现
class Solution {
public:
bool isCharNum(char a) {
if ((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z') || (a >= '0' && a <= '9')) {
return true;
}
return false;
}
bool isPalindrome(string s) {
int len = s.size();
if (len == 0) {
return true;
}
int i = 0;
int j = len - 1;
while (i <= j && j < len) {
while (i < len && j >=0 && !isCharNum(s[i])) {
i++;
}
while (i < len && j >=0 && !isCharNum(s[j])) {
j--;
}
if (i <= j && j < len && i >= 0) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 32;
}
if (s[j] >= 'a' && s[j] <= 'z') {
s[j] = s[j] - 32;
}
if (s[i] == s[j]) {
i++;
j--;
} else {
return false;
}
}
}
return true;
}
};
博客围绕验证字符串是否为回文串展开。题目要求只考虑字母和数字字符,忽略大小写,空字符串视为有效回文串,并给出示例。思路方面需注意索引越界,还提及 ASCII 码中字母大小写差值为 32。
247

被折叠的 条评论
为什么被折叠?



