📜  门|门模拟 2017 |问题 7(1)

📅  最后修改于: 2023-12-03 14:58:37.873000             🧑  作者: Mango

门|门模拟 2017 |问题 7

简介

"门|门模拟"是一个程序员面试准备的项目,旨在通过提供模拟的编程问题,帮助程序员加深对算法和数据结构的理解,提高解决问题的能力。

在这个项目中,我们将介绍"门|门模拟 2017"中的问题7,并提供一个解决方案作为参考。以下是问题的描述和解决方法。

问题描述

题目7:"门|门模拟 2017"中的问题7要求实现一个算法,用于判断一个字符串是否为有效的括号组合。有效的括号组合包含以下几种类型的括号:

  • '(', ')'
  • '[', ']'
  • '{', '}'

字符串中只包含上述字符,并且满足以下条件:

  • 括号必须以正确的顺序关闭(例如:"()([])"是有效的,而"([)]"则是无效的)。
  • 一个空字符串也被认为是有效的括号组合。

实现一个函数 isValidParentheses(str: string): boolean,输入一个字符串 str,返回一个布尔值,表示该字符串是否为有效的括号组合。

解决方法

下面是一个简单的解决方案,它使用栈的数据结构来实现括号的匹配。

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

  for (let i = 0; i < str.length; i++) {
    const char = str[i];

    if (pairs[char]) {
      stack.push(char);
    } else {
      const top = stack.pop();

      if (char !== pairs[top]) {
        return false;
      }
    }
  }

  return stack.length === 0;
}

这个函数使用一个栈 stack 来记录遇到的括号,遍历输入字符串。当遇到一个左括号时,将其入栈;当遇到一个右括号时,与栈顶的括号进行匹配。

如果遇到的是左括号,将其入栈。如果遇到的是右括号,取出栈顶的括号,并检查是否与当前右括号匹配。如果不匹配,返回 false。如果遍历完字符串后,栈为空,说明所有的括号都匹配成功,返回 true;否则,返回 false

总结

"门|门模拟 2017 |问题 7" 是一个字符串括号匹配的问题。我们提供了一个基于栈的简单解决方案。这个方案通过遍历输入字符串,使用栈来进行左右括号匹配,最后判断栈是否为空来确定括号是否有效。这个问题可以帮助程序员加深对栈这种数据结构的理解,并训练解决问题的能力。