题目描述
有效的括号字符串有 () , (A) , A+B, 其中A,B也为有效的括号字符串。若有效的括号字符串S非空,且不存在将S分解为A+B的方法(A,B皆为有效的括号字符串),那么S为不可分解的。给出字符串S,我们将其分解为 S = S1+S2+...+Sn, 其中每一个Si都是不可分解的。
现在要求你将S拆分为n个不可分解的串,并去除掉每一个不可分解串最外层的括号。
输入
输入包含多组测试样例。
每一组测试样例都是一个合法字符串S (|S|<100)。
输出
对于每组样例,输出分解之后然后去除掉括号的字符串。
样例输入
(()())(()) ()(())
样例输出
()()() ()
代码:
#include<bits/stdc++.h>
using namespace std;
//此题实质上要求删除'()'(空括号)和非空括号中不可分解串的外层括号
string Delete(string s){
stack<int> st;
string ans;
for(int i=0;i<s.size();++i){
if(s[i]=='('){
if(!st.empty()) ans+=s[i];
st.push(i);//左括号下标入栈
}
else{
st.pop();
if(st.size()) ans+=s[i];
}
}
return ans;
}
int main(){
string s;
while(cin>>s){
cout<<Delete(s)<<endl;
}
return 0;
}