问加几个括号变合法序列

该博客主要讨论如何解决一个编程问题,即给定一个不合法的括号序列,求解添加最少数量的括号使其变得合法。通过使用栈数据结构来检查和修正括号,程序可以确定需要添加的括号数量。示例和代码展示了解决方案的实现。

 链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

康康刚学习编程,一天教程序设计的刘老师给他出了个问题,并跟他说做不完不能走!康康看到题目傻眼了,这我哪会做啊,于是偷偷通过QQ把题目发给了你,希望你能够帮他做出来。

题目是这样的:

给你一个括号的序列,比如()()),你可以在其中添加'('或者')',现在你希望添加尽可能少的括号,让这个括号序列合法,请问你应该添加多少括号,才能使这个括号序列合法?

合法的括号序列:()((()))

不合法的括号序列)()(())(,或者()))))等
 

输入描述:

第一行一个整数n,代表这个序列的长度,一个序列代表这个括号序列

输出描述:

输出最少的添加的括号字符数

示例1

输入

5
((())

输出

1

说明

可以这么添加:((()))

示例2

1
(

输出

1

说明

可以这么添加:()

示例3

输入

1
)

输出

复制1

1

说明

可以这么添加:()

示例4

输入

2
()

输出

0

说明

合法,不用任何操作~

题解:不多说,只让求加几个半括号是常规题目

 ACCODE:

#include <iostream>
#include <algorithm>
#include <stack>
#include <cstring>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
#define N 500
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n;
string s;
stack<int>st;
int main(){
	cin>>n;
	cin>>s;
	for(int i=0;i<s.length();i++){
		if(s[i]=='(')st.push('(');
		else {
			if(!st.empty()&&st.top()=='('){
				st.pop();
				
			}
			else{
				st.push(')');
			}
		}
	}
	cout<<st.size();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值