def is_valid(s):
    """
    Using a conventional stack struct, validate
    strings in the form "({[]})" by:

    1. pushing all openning chars: '(','{' and '[', sequentially.
    2. when a closing character like ')', '}' and '] is found
       we pop the last opening char pushed into stack
    3. check if popped char matches the closing character found.
       If stack is empty and all comparisons are a match, returns
       true. False otherwise.

    s: string to be validaded
    return True or False depending if string is valid or not
    """

    if len(s) < 2:
        return False

    parent_map = {
        '(': ')',
        '{': '}',
        '[': ']',
    }

    stack = []

    for c in s:
        # if opening char
        if c in parent_map.keys():
            stack.append(c)
        else:
            if not stack:
                return False
            # attempt matching opening and closing chars
            if parent_map[stack.pop()] != c:
                return False

    return not stack