problems:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: “A man, a plan, a canal: Panama”
Output: true
Example 2:
Input: “race a car”
Output: false
tips:
本题判断是否为回文,但是只对字母和数字字符进行判断,所以首先判断字符是否非字母数字;其次,大小写字母的问题,大写字母比小写字母的ASCII码值小32,所以大写字母加32再减去‘a’可以得到它相对于a的正确位置,和32取余时,因为它小于32所以依然是它的正确位置;而小写字母加32减去‘a’因为最后对32取余,所以没有影响还是它相对于’a’的正确位置。
solutions:
class Solution {
public:
bool isp(char mm)
{
if(mm>='a' && mm<='z') return true;
if(mm>='A' && mm<='Z') return true;
if(mm>='0' && mm<='9') return true;
return false;
}
bool isPalindrome(string s) {
int n = s.size();
if(n == 0) return true;
int i = 0,j = n-1;
while(i < j)
{
if(!isp(s[i])) ++i;
else
if(!isp(s[j])) --j;
else
if((s[i]+32-'a')%32 == (s[j]+32-'a')%32)
{
i++;
j--;
}
else
return false;
}
return true;
}
};