判断是否为有效括号(20)

24 阅读1分钟

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。

使用js可以使用栈(Stack)来解决该问题。

解题思路:

  1. 遍历字符串中的每一个字符
  2. 如果当前字符是左括号,则将其压入栈中
  3. 如果当前字符是右括号,则判断栈是否为空,如果为空则直接返回false,否则将栈顶元素弹出并判断是否与当前右括号匹配,如果不匹配则返回false
  4. 如果遍历完字符串后栈不为空,则返回false,否则返回true

可以使用以下代码实现:

const judgeStr = function (s) {
  const len = s.length;
  if (len % 2 !== 0 || len === 0) return false;
  let stack = [];
  for (let i = 0; i < s.length; i++) {
    let c = s.charAt(i);
    //    左括号的处理
    if (c === "(" || c === "{" || c === "[") {
      stack.push(c);
    } else {
      if (stack.length === 0) return false;
      let top = stack.pop();
      if (
        // 这个地方注意下,左右括号不要写反了
        (c === ")" && top !== "(") ||
        (c === "]" && top !== "[") ||
        (c === "}" && top !== "{")
      ) {
        return false;
      }
    }
  }
  return stack.length === 0;
};