【栈】表达式括号匹配

Jacob-Chen / 2024-08-23 / 原文

题目描述

(1+(2+3)*(3+(8+0))+1-2) 这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。

前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,

而((())这样的我们就说他是错误的。注意括号里面的表达式可能是错的,也可能有多个空格,对于这些我们是不用去管的,

我们只关心括号是否使用正确。

输入描述

给出一行表达式(长度不超过 100)。

输出描述

如果匹配正确输出括号的对数,否则输出-1。

用例

输入:(1+(2+3)*(3+(8+0))+1-2)
输出: 4

题目解析

  1. 遍历字符串内每一个字符
  2. 当遇到 ( 时,入栈
  3. 当遇到 ) 时,如果栈为空,则直接返回-1。如果栈不为空,则出栈一个(,配对数+1。
  4. 遍历完毕后,如果栈不为空,则返回-1。如果栈为空,返回配对数。

代码实现