1. // 20. 有效的括号
    2. // 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
    3. // 有效字符串需满足:
    4. // 左括号必须用相同类型的右括号闭合。
    5. // 左括号必须以正确的顺序闭合。
    6. // 输入:s = "([{}])"
    7. // 输出:true
    8. // 输入:s = "(]"
    9. // 输出:false
    10. /**
    11. * @param {string} s
    12. * @return {boolean}
    13. */
    14. // 题解
    15. // 1、观察例子中的输入情况,从左到右符合后进先出,既符合栈的规则
    16. // 2、能够闭合则为偶数个数
    17. // 3、左右括号能够一一对应,
    18. var isValid = function(s) {
    19. // 能够闭合则为偶数个数,如果为奇数直接返回false
    20. if(s.length % 2 === 1) { return false }
    21. //从左到右符合后进先出,既符合栈的规则,这里采用数组来模拟栈
    22. const stack = [];
    23. for(let i = 0; i < s.length; i += 1) {
    24. // 获取当前值
    25. const c = s[i];
    26. // 将左节点push进栈
    27. if(c === '(' || c === '[' || c === '{') {
    28. stack.push(c)
    29. } else {
    30. // 判断是否与栈顶相同,相同弹出
    31. const t = stack[stack.length - 1];
    32. if(
    33. (t === '(' && c === ')') ||
    34. (t === '[' && c === ']') ||
    35. (t === '{' && c === '}')
    36. ) {
    37. stack.pop()
    38. } else {
    39. return false
    40. }
    41. }
    42. }
    43. return stack.length === 0
    44. };
    45. const s = "()"
    46. console.log(isValid(s));

    其他:本次采用栈的写法,其他有集合