括号匹配

该博客介绍了一个加强版的括号匹配问题,要求计算在给定的n个由括号组成的字符串中,有多少对字符串组合能形成合法的括号匹配。通过分析字符串的合法性和配对方式,得出解决方案,并提供了输入输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目 括号匹配

一般的括号匹配问题是这样的:
给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配,但是”()()()”,”(()())()”等就是合法的括号匹配。这个问题解决起来非常简单,相信大家都知道怎么解决。
现在给出一个加强版的括号匹配问题: 给出n个由括号 ‘(’ 和 ‘)’ 组成的字符串,请计算出这些字符串中有多少对字符串满足si + sj是合法的括号匹配。如果si + sj和sj + si都是合法的括号匹配(i ≠ j),那么这两种搭配都需要计入答案;如果对于si,si + si是合法的括号匹配,那么也需要计入答案。

输入描述:
第一行是一个整数n,表示字符串的个数;接下来n行是n个非空字符串,全部由’(‘和’)’组成。1 <= n <= 3 * 105,字符串的长度之和不超过3 * 105。

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

输入例子1:
3
()
(
)

输出例子1:
2

输入例子2:
5
(()
)))))
()()()
(((
))

输出例子2:
1

解析

合法判断:去除字符串中形如”()”,直到不能去除为止,若字符串被清理为空,那么字符串合法,否则字符串不合法,变成以下三种:”(…(“、”)…)”、”)…)(…(“。考虑清理之后的字符串;
n个字符串中,合法的字符串有num1个,不合法的字符串中,只有”(…(“、”)…)”能配成一组,二重循环遍历不合法字符串,配对数为num2;
最终结果为num1*num1+num2。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值