c++
class Solution {
public:
bool isPalindrome(string s) {
if (s.empty())
return true;
s = getCleanString(s);
int i = 0, j = s.size() - 1;
while (i < j) {
if (s[i++] != s[j--])
return false;
}
return true;
}
private:
string getCleanString(string s) {
string res;
transform(s.begin(), s.end(), s.begin(), ::tolower);
for (auto v : s) {
if ((v >= 'a' && v <= 'z') || (v >= '0' && v <= '9'))
res.push_back(v);
}
return res;
}
};
python
class Solution(object):
def __init__(self):
self.numStr = [ str(x) for x in xrange(10)]
self.aphStr = [ chr(x + ord('a')) for x in xrange(26)]
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if not s:
return True
s = s.lower()
s = list(s)
s = [x for x in s if x in self.numStr or x in self.aphStr]
return s == s[::-1]
class Solution(object):
def isPalindrome(self, s):
s = "".join(re.findall("[a-zA-Z0-9]*", s)).lower()
return s == s[::-1]
reference:
https://leetcode.com/discuss/98522/two-line-python-solution-using-regexp-beats-99%25
http://blog.youkuaiyun.com/zouxy09/article/details/16920661