题目:
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.
题目来源:https://oj.leetcode.com/problems/valid-palindrome/
解题思路:从两个指针,一个从前往后,一个从后往前扫描即可
#include<iostream>
using namespace std;
bool isPalindrome(string s)
{
if(s.size()<=1)
return true;
const int N=s.size();
int i=0,j=N-1;
while(i<j)
{
if(isalpha(s[i]))
s[i]=tolower(s[i]);
else if(!isdigit(s[i]))
{
i++;
continue;
}
if(isalpha(s[j]))
s[j]=tolower(s[j]);
else if(!isdigit(s[j]))
{
j--;
continue;
}
if(s[i]==s[j])
{
i++;
j--;
}
else
return false;
}
return true;
}
int main()
{
string s="A man, a plan, a canal: Panama";
cout<<isPalindrome(s)<<endl;
system("pause");
return 0;
}