给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路
- 使用栈作为中介
- 依次扫描,遇到左侧括号,入栈
- 遇到右侧括号,做出栈操作,并检查出栈的之和当前的值是不是配对的。 如果不匹配,就返回false
- 全部的字符扫描结束之后,如果栈不为空,返回false,否则返回true
var stack = {list: [],in:function(s){this.list.push(s)},out:function(){// var curMaxIdx = this.list.length-1// var curVal = this.list[curMaxIdx]// this.list.length = Math.max(0,curMaxIdx)return this.list.pop()},isEmpty(){return this.list.length === 0}}var isValid = function(s) {const map={"}":"{",")":"(","]":"["}for(str of s) {var arr = Object.values(map)if(arr.includes(str)){// if(['(','[','{'].includes(str)) {stack.in(str)} else {if(map[str] !== stack.out()){// if(!isEqual(str,stack.out())){return false}}}return stack.isEmpty()};
