利用栈解决()[]的对应问题,基于水题——括号序列

该博客介绍如何利用栈解决括号序列的匹配问题,遵循特定规则判断序列是否为有效规则序列,并提供算法实现,针对给定输入补全括号序列。

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

1、题目

定义如下规则序列(字符串):

1.空序列是规则序列;

2.如果S是规则序列,那么(S)和[S]也是规则序列;

3.如果A和B都是规则序列,那么AB也是规则序列。

例如,下面的字符串都是规则序列:

(),[],(()),([]),()[],()[()]

而以下几个则不是:

(,[,],)(,()),([()

现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是补全该括号序列,即扫描一遍原序列,对每一个右括号,找到在它左边最靠近它的左括号匹配,如果没有就放弃。在以这种方式把原序列匹配完成后,把剩下的未匹配的括号补全。

输入:

([()

输出:

()[]()

 2、题解

int main() {
	//()[()))(];算法思路,利用栈,默认规则即为0,如果不规则,再利用数组打上标记,且只要标记左符号就好,然后输出的时候再特殊输出就好,(((()())()[((())]
	string str;
	cin >> str;
	
	int* state = new int[str.size()]();//初始为0,默认规则,[(]
	stack<char> arr;	
	
	for (int i = str.si
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值