一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。
输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50). s中每个字符都是左括号或者右括号,即'('或者')'.
输出一个整数,表示最少需要添加的括号数
(()(()
2
//遇到匹配的就出栈,剩下的即为需要匹配的#include <iostream>#include <stack>#include <string>usingnamespacestd;intmain(){stack<char> s;string str;cin>>str;intn=str.size();for(inti=0;i<n;++i){if(s.empty())s.push(str[i]);elseif(s.top()=='('&&str[i]==')')s.pop();elses.push(str[i]);}cout<<s.size()<<endl;return0;}
先找配置的括号,然后总长度减去匹配括号的长度就是结果。#include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<stack>usingnamespacestd;intmain(){string s;cin>>s;stack<char> sk;intans=0;for(inti=0;i<s.length();++i){if(s[i]=='('){sk.push(s[i]);}else{if(!sk.empty()){sk.pop();ans+=2;}}}cout<<s.length()-ans<<endl;return0;}