Skip to content

Instantly share code, notes, and snippets.

@dmpv
Last active April 5, 2017 16:41
Show Gist options
  • Save dmpv/5f859b22cdd62d943ddfecdf0efb2f41 to your computer and use it in GitHub Desktop.
Save dmpv/5f859b22cdd62d943ddfecdf0efb2f41 to your computer and use it in GitHub Desktop.
static const char kNotAParen = 0;

static inline BOOL isOpenParen(char paren) {
    return paren == '[' || paren == '(' || paren == '{';
}

static inline BOOL isCloseParen(char paren) {
    return paren == ']' || paren == ')' || paren == '}';
}

static inline char closeForOpenParen(char paren) {
    if (paren == '{') return '}';
    if (paren == '[') return ']';
    if (paren == '(') return ')';
    return kNotAParen;
}

BOOL isValidSequence(char sequence[]) {
    NSUInteger size = sizeof(sequence) / sizeof(char);
    Vector stack = Vector<char>();
    for (int i = 0; i < size; ++i) {
        paren = sequence[i];
        BOOL isOpen = isOpenParen(paren);
        if (!isOpen && !isCloseParen(paren)) {
            return NO;
        }
        if (isOpen) {
            stack.push(paren);
        }
        else {
            if (closeForOpenParen(stack.back()) == paren) {
                stack.pop(paren);
            }
            else {
                return NO;
            }
        }
    }
    return stack.size() == 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment