LeetCode刷题,有效的括号(20)

461 阅读1分钟

有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

解题代码

思路:只需要判断当有右括号时,是否有对应的左括号,所以直接用栈模拟即可。

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; // 如果栈里存在元素说明括号没有全部匹配上。
};