LeetCodeOJ. Valid Palindrome

试题请参见: https://oj.leetcode.com/problems/valid-palindrome/

题目概述

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.

解题思路

一开始总想着不占用额外的内存空间解决问题, 但是运行时各种Runtime Error, 因为需要考虑的情况太多了.

于是为了使代码看起来比较简洁, 于是先使用一个函数过滤无用的字符串, 再进行比对.

遇到的问题

各种Runtime Error. 
尤其是当过滤之后字符串长度为0时.

源代码

class Solution {
public:
    bool isPalindrome(std::string s) {
        s = filter(s);

        for ( size_t i = 0; s.size() != 0 && i <= s.size() / 2; ++ i ) {
            if ( s.at(i) != s.at(s.size() - i - 1) ) {
                return false;
            }
        }
        return true;
    }
private:
    std::string filter(std::string s) {
        std::string d;

        for ( size_t i = 0; i < s.size(); ++ i ) {
            if(::isalpha(s[i]) || ::isdigit(s[i])){
                d.push_back(::tolower(s[i]));
            }
        }
        return d;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章