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.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
题目解析:
1、首先将问题分解为几块
(1)判断是不是字母
(2)将大写字母转化为小写进行比较
2、需要考虑的特殊情况
(1)“”字符串为空
(2)“ ;”字符串中无字母数字
(3)“ aba”奇数回文字符
(4)“ aa”偶数回文字符
#include <iostream>
using namespace std;
bool isAlphanumeric(char c)
{
if( (c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9') )
return true;
else
return false;
}
char changeToLowCase(char c)
{
if( (c>='A'&&c<='Z') )
c = c + 32;
return c;
}
bool isPalindrome(string s) {
int len = s.size();
int begin = 0;
int end = len-1;
bool flag = true;
while(begin <= end)
{
if(!isAlphanumeric(s[begin]) )
begin++;
if(!isAlphanumeric(s[end]) )
end--;
if( isAlphanumeric(s[begin])&&isAlphanumeric(s[end]))
{
if(changeToLowCase(s[begin]) != changeToLowCase(s[end]))
{
flag = false;
break;
}else{
begin++;
end--;
}
}
}
return flag;
}
int main(void)
{
string s(" ab");
cout << isPalindrome(s) << endl;
system("pause");
return 0;
}