给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false
// 数据结构:栈;入栈出栈function isValidBrackets(str) {if(str.length % 2) return false// 可用 Map([['{', '}'], ['[', ']'], ['(', ')']]) 替代const bracketsType = {'{': '}','[': ']','(': ')'}// 创建栈let stack = []for(let i = 0; i < str.length; i++) {// Reflect.ownKeys(bracketsType) // ["{", "[", "("]if(Reflect.ownKeys(bracketsType).includes(str[i])) {stack.push(str[i])} else {const curStr = stack.pop() // 栈顶元素// 重点:当前元素和栈顶元素的属性值比较是否相等if(bracketsType[curStr] !== str[i]) {return false}}}return !stack.length}isValidBrackets('(}')
总结:
bracketsType可用ES6Map数据结构来替代;for循环可用for...of来替代;Reflect.ownKeys(bracketsType).includes(str[i])可用:Reflect.has(object, key),或key in object替代;- 获得栈顶元素:
stack.pop()或stack[stack.length - 1];
