首页 > 试题广场 >

括号匹配

[编程题]括号匹配
  • 热度指数:2026 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

一般的括号匹配问题是这样的:

给出一个字符串,判断这个括号匹配是不是合法的括号匹配。

如"((" 和 "())"都不是合法的括号匹配,但是"()()()","(()())()"等就是合法的括号匹配。

这个问题解决起来非常简单,相信大家都知道怎么解决。

现在给出一个加强版的括号匹配问题: 给出n个由括号 '(' 和 ‘)’ 组成的字符串,请计算出这些字符串中有多少对字符串满足si + sj是合法的括号匹配。如果si + sj和s+ si都是合法的括号匹配(i ≠ j),那么这两种搭配都需要计入答案;如果对于sisi + si是合法的括号匹配,那么也需要计入答案。



输入描述:

第一行是一个整数n,表示字符串的个数;

接下来n行是n个非空字符串,全部由'('和')'组成。

1 <= n <= 3 * 105,字符串的长度之和不超过3 * 105



输出描述:
一个整数,表示满足条件的字符串对的数量。
示例1

输入

3
()
(
)

输出

2
示例2

输入

5
(()
)))))
()()()
(((
))

输出

1

这道题你会答吗?花几分钟告诉大家答案吧!