/** * @param {string} s * @return {boolean} */ const isValid = function (s) { }; /* 题目所给的测试用例只包含'(',')','{','}','[',']'这些字符,如果是一个有效字符则说明它一定是一对一对的出现 也就是说s的长度是偶数,如果是奇数就一定存在一个括号没有闭合,倘若是偶数个,我们需要在遇到右括号时检查它的前一个 括号是否是对应的左括号,如果是的话,则表明这是一对合理的括号,之后检查后一个括号,以次类推。 */ function f1(s) { // 如果长度不是偶数,一定不能正常闭合 if (s.length % 2 !== 0) return false; // 括号的映射表 const map = new Map([ [')', '('], [']', '['], ['}', '{'], ]); const stack = []; // 利用栈结构来检查括号是否整除闭合 for (const brack of s) { if (map.has(brack)) { // 如果栈为空,或者栈顶括号不是对应的括号,表明不能正常闭合,返回false if (!stack.length || stack[stack.length - 1] !== map.get(brack)) return false; stack.pop();// 如果正常闭合,从栈中去掉这个左括号 } else { stack.push(brack); } } return !stack.length; }