返回

各显神通,征服括号世界:揭秘有效括号的多种实现方式

前端





小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

## 目录

- 有效的括号(if..else 实现)
- 有效的括号(switch..case 实现)
- 有效的括号(对象分支 实现)
- 有效括号的多个

## 有效括号的定义

有效括号是指成对出现的括号,其中每个左括号都有一个匹配的右括号,而且这些括号的顺序是正确的。

例如,以下字符串包含有效括号:

"()"
"[()]"
"{[]}"


以下字符串包含无效括号:

"("
")()"
"([)]"
"{[}]"


## 有效括号的判断方法

判断一个字符串是否包含有效括号,可以使用以下方法:

1. 栈:将左括号压入栈中,当遇到右括号时,将栈顶的左括号弹出。如果栈为空,则字符串包含有效括号;否则,字符串包含无效括号。
2. 计数器:对每个左括号,将计数器加一;对每个右括号,将计数器减一。如果计数器始终为零,则字符串包含有效括号;否则,字符串包含无效括号。

## 有效括号的三种实现方式

### 1. if..else 实现

```js
function isValidParentheses(str) {
  const stack = [];
  const left = ['(', '[', '{'];
  const right = [')', ']', '}'];

  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    if (left.includes(char)) {
      stack.push(char);
    } else if (right.includes(char)) {
      const top = stack.pop();
      if (left.indexOf(top) !== right.indexOf(char)) {
        return false;
      }
    }
  }

  return stack.length === 0;
}

2. switch..case 实现

function isValidParentheses(str) {
  const stack = [];

  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    switch (char) {
      case '(':
      case '[':
      case '{':
        stack.push(char);
        break;
      case ')':
      case ']':
      case '}':
        const top = stack.pop();
        if (char === ')' && top !== '(') {
          return false;
        } else if (char === ']' && top !== '[') {
          return false;
        } else if (char === '}' && top !== '{') {
          return false;
        }
        break;
    }
  }

  return stack.length === 0;
}

3. 对象分支 实现

function isValidParentheses(str) {
  const stack = [];
  const pairs = {
    ')': '(',
    ']': '[',
    '}': '{'
  };

  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    if (pairs[char]) {
      const top = stack.pop();
      if (top !== pairs[char]) {
        return false;
      }
    } else {
      stack.push(char);
    }
  }

  return stack.length === 0;
}

结语

有效括号的判断是编程面试中常见的问题。本文介绍了有效括号的定义、判断方法,并用三种不同实现方式——if..else、switch..case、对象分支——来演示如何解决这个问题。希望本文对您有所帮助。