解题思路:
从string两端分别遍历数组,遇到空格,标点跳过,看两边对应字母是否相等。
原题目
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.
AC解,C++代码,菜鸟一个,请大家多多指正
class Solution {
public:
bool isDigit(char c) {
if (c >= '0' && c <= '9') {
return true;
}
return false;
}
bool isAlp(char c) {
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
return true;
}
return false;
}
bool isEqual(char a, char b) {
if (isDigit(a) && isDigit(b)) {
return a == b;
}
if (isAlp(a) && isAlp(b)) {
if (a - b == 0 || a - b == 32 || b - a == 32) {
return true;
}
}
return false;
}
bool isPalindrome(string s) {
if (s.empty()) return true;
int left = 0;
int right = s.length() - 1;
while (left <= right) {
while (left <= right && !(isDigit((s[left])) || isAlp(s[left]))) {
left++;
}
while (left <= right && !(isDigit((s[right])) || isAlp(s[right]))) {
right--;
}
if (left <= right && !isEqual(s[left], s[right])) {
return false;
}
else if (left <= right) {
left++;
right--;
}
}
return true;
}
};