有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
解题代码
思路:只需要判断当有右括号时,是否有对应的左括号,所以直接用栈模拟即可。
var isValid = function(s) {
const stack = []; // 存储括号序列
for (let i = 0; i < s.length; i++) {
const stackTop = stack[stack.length - 1];
switch (s[i]) {
// 如果是左括号入栈即可
case "(": stack.push(s[i]); break;
case "{": stack.push(s[i]); break;
case "[": stack.push(s[i]); break;
// 判断栈顶元素是否是当前种类括号的相反括号,是的话,那么栈顶出栈,代表当前两个括号匹配成功。
case ")": if (stackTop !== "(") return false; stack.pop(); break;
case "}": if (stackTop !== "{") return false; stack.pop(); break;
case "]": if (stackTop !== "[") return false; stack.pop(); break;
}
}
return !stack.length; // 如果栈里存在元素说明括号没有全部匹配上。
};