问题
思路
顺序表这块的思路,但是这个题目要忽略标点。并且不区分大小写,数字字母。
class Solution {
public:
bool isPalindrome(string s) {
if(s == "")
return true;
std::string ret;
unsigned sz = s.size();
for(unsigned i = 0; i < sz; ++i)
{
if( isalnum(s[i]) )
ret.push_back( std::tolower(s[i]) );
}
return std::equal( ret.begin(), ret.end(), ret.rbegin() );
}
};
思路
递归的实现。
代码
class Solution {
public:
bool isPalindrome(string s) {
int sz = s.size();
if(!sz) return true;
std::string ret;
for(int i = 0; i < sz; ++i){
if( isalnum(s[i]) ) ret.push_back(tolower(s[i]));
}
if(!ret.size()) return true;
return isPalindrome( ret, 0, ret.size()-1 );
}
private:
bool isPalindrome(const string& s, int low, int high) {
if(low==high) return true;
else if(low + 1 == high) return s[low] == s[high];
else{
return s[low] == s[high] && isPalindrome(s , low+1, high-1);
}
}
};