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.
大过年的做题。。。
我快被叔叔逼死了。。。
哈哈哈。。。一开始又没看明白题。。。因为没看懂example。。。我以为是三个例子。。。蓝后就百思也没思出来哪里回文了,直到!!!我看到了“is”!!!
尼玛这是一个例子。。。终于看懂题了。。。就是说,只看字母,不看大小写,不看标点等,字母回文就ok了。。。
好了。。。做吧。。。23333333333
查了一下回文
最经典的思路就是左右掐
左右最后一位比较,然后一位一位移动,最后left和right距离为零或者在中间位相遇,就结束判断
class Solution {
public:
bool isPalindrome(string s) {
if(s.empty())
{
return true;
}
int right = s.size() - 1;
int left = 0;
while(left < right)
{
while(!isalnum(s[left])) //非字母数字字符可使用isalnum函数判断
{
++left;
if(left >= right)
{
break;
}
}
while(!isalnum(s[right]))
{
--right;
if(right <= left)
{
break;
}
}
if(left >= right)
{
break;
}
s[left] = tolower(s[left]); //大写字母转小写
s[right] = tolower(s[right]);
if(s[left] != s[right])
{
return false;
}
++left;
--right;
}
return true;
}
};