?链接:登录—专业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();
}
|