20. 有效的括号

    1. 给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
    2. 有效字符串需满足:
    3. 左括号必须用相同类型的右括号闭合。
    4. 左括号必须以正确的顺序闭合。
    5. 示例 1
    6. 输入:s = "()"
    7. 输出:true
    8. 示例 2
    9. 输入:s = "()[]{}"
    10. 输出:true
    11. 示例 3
    12. 输入:s = "(]"
    13. 输出:false
    1. // 数据结构:栈;入栈出栈
    2. function isValidBrackets(str) {
    3. if(str.length % 2) return false
    4. // 可用 Map([['{', '}'], ['[', ']'], ['(', ')']]) 替代
    5. const bracketsType = {
    6. '{': '}',
    7. '[': ']',
    8. '(': ')'
    9. }
    10. // 创建栈
    11. let stack = []
    12. for(let i = 0; i < str.length; i++) {
    13. // Reflect.ownKeys(bracketsType) // ["{", "[", "("]
    14. if(Reflect.ownKeys(bracketsType).includes(str[i])) {
    15. stack.push(str[i])
    16. } else {
    17. const curStr = stack.pop() // 栈顶元素
    18. // 重点:当前元素和栈顶元素的属性值比较是否相等
    19. if(bracketsType[curStr] !== str[i]) {
    20. return false
    21. }
    22. }
    23. }
    24. return !stack.length
    25. }
    26. isValidBrackets('(}')

    总结:

    1. bracketsType可用ES6Map数据结构来替代;
    2. for循环可用for...of来替代;
    3. Reflect.ownKeys(bracketsType).includes(str[i])可用:Reflect.has(object, key),或key in object替代;
    4. 获得栈顶元素:stack.pop()stack[stack.length - 1]