给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项:
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
样例:
“A man, a plan, a canal: Panama” 是一个回文。
“race a car” 不是一个回文。
挑战 :
O(n) 时间复杂度,且不占用额外空间。
#ifndef C415_H
#define C415_H
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
/*
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
bool isPalindrome(string &s) {
// write your code here
if (s.empty())
return true;
int l = 0, r = s.size() - 1;
while (l < r)
{
if (isalnum(s[l]) && isalnum(s[r]))
{
if (tolower(s[l]) != tolower(s[r]))
{
return false;
break;
}
++l;
--r;
}
else if (isalnum(s[l]) && !isalnum(s[r]))
--r;
else if (!isalnum(s[l] && isalnum(s[r])))
++l;
else
{
++l;
--r;
}
}
return true;
}
};
#endif