Kaelan

Kaelan Kaelan

Niner since 2004

Discussions

Comments

  • Gary Daniels and Evan Goldring - Mock whiteboard problem

    Decided to try and cook up a solution. Did some testing, it handled all the test cases I threw at it correctly. It's not exactly a pretty solution, but eh.
    #include <list>
    inline bool isAlphanumeric(_TCHAR ch) {
        return ((ch >= 'a') && (ch <= 'z') || (ch >= 'A') && (ch <= 'Z') || (ch >= '0') && (ch <= '9'));
    }
    int isPalindrome(_TCHAR* string) {
        // init
        if (string == 0) return -1;
        _TCHAR *c = string;
        std::list<_TCHAR> stack;
        // build stack
        while (*c != 0)
            stack.push_back(*c++);
        _TCHAR a, b;
        while (stack.size() > 1) {
            // pull the start and end items off the stack
            a = stack.front(); b = stack.back();
            stack.pop_front(); stack.pop_back();
            if (a != b) return 0;
            // they are both equal so just test one
            if (!isAlphanumeric(a)) return 0;
        }
        // if the middle character is not alphanumeric the stack scanning algorithm won't catch it, so check
        if ((stack.size() > 0) && (!isAlphanumeric(stack.back()))) return 0;
        return 1;
    }