// 20. 有效的括号// 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。// 有效字符串需满足:// 左括号必须用相同类型的右括号闭合。// 左括号必须以正确的顺序闭合。// 输入:s = "([{}])"// 输出:true// 输入:s = "(]"// 输出:false/*** @param {string} s* @return {boolean}*/// 题解// 1、观察例子中的输入情况,从左到右符合后进先出,既符合栈的规则// 2、能够闭合则为偶数个数// 3、左右括号能够一一对应,var isValid = function(s) {// 能够闭合则为偶数个数,如果为奇数直接返回falseif(s.length % 2 === 1) { return false }//从左到右符合后进先出,既符合栈的规则,这里采用数组来模拟栈const stack = [];for(let i = 0; i < s.length; i += 1) {// 获取当前值const c = s[i];// 将左节点push进栈if(c === '(' || c === '[' || c === '{') {stack.push(c)} else {// 判断是否与栈顶相同,相同弹出const t = stack[stack.length - 1];if((t === '(' && c === ')') ||(t === '[' && c === ']') ||(t === '{' && c === '}')) {stack.pop()} else {return false}}}return stack.length === 0};const s = "()"console.log(isValid(s));
其他:本次采用栈的写法,其他有集合
