[({})] => true
    [()[]{}] => true
    {[(]} => false
    {[( => false

    1. var isValid = function(str) {
    2. var stack = [],
    3. isBalance = true,
    4. open = '{[(',
    5. close = '}])',
    6. i = 0,
    7. symbol, top;
    8. while(i < str.length && isBalance) {
    9. symbol = str[i];
    10. if(open.includes(symbol)) {
    11. stack.push(symbol);
    12. } else {
    13. top = stack.pop();
    14. isBalance = open.indexOf(top) === close.indexOf(symbol);
    15. if(!isBalance) break;
    16. }
    17. i++;
    18. }
    19. return isBalance && stack.length === 0;
    20. }

    利用栈来解决,
    遍历字符串,当遇到开括号全部入栈,遇到闭括号出栈。
    判断出栈的开括号是否与闭括号配对,如果配对继续遍历判断。
    如果不配对即不是平衡括号。
    遍历完成后,如果栈为空时,即所有开括号都应该有对应该的闭括号。否则还是不平衡。