分析:去除最外一层的括弧;
首先从最简单的开始分析(),对于这样单一的括弧,去除最外层,就是把字符串最开始的最后的元素去除即可;在复杂一点()(),那么分开看成两个()+(),用一个temp字符串临时存放前面一个,当遍历到),即形成一个完整的括弧,那么删去它的最外层括弧,然后将临时的字符串temp清空继续遍历下一个完整的括弧;再继续(())(),对于前一部分 ,首先我们要找到(()),这里可以利用栈的思想,栈可以用于括号匹配,遇到(入栈,遇到)出栈,当栈为空时说明一个括弧遍历完成,那么再去除最外层的();
1、声明两个变量,temp(存放子括弧),result(最后结果);声明栈
2、遍历S字符串的每个元素,当==(,入栈,==)出栈;
3、栈为空,部分子括弧遍历结束,将最外层()去除,加入到result中;
class Solution {
public:
string removeOuterParentheses(string S) {
stack<char> s1;
string temp;
string result;
int len = S.length();
for(int i=0;i<len;i++){
if(S[i]=='('){
s1.push(S[i]);
}
if(S[i]==')'){
s1.pop();
}
temp+=S[i];
if(s1.empty()){
temp.erase(temp.begin());
temp.erase(temp.end()-1);
result+=temp;
temp.clear();
}
}
return result;
}
};