1. 题目
题目链接
示例 1:
输入:"(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
示例 2:
输入:"(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
示例 3:
输入:"()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
提示:
S.length <= 10000
S[i] 为 "(" 或 ")"
S 是一个有效括号字符串
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-outermost-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 跳过
i = 0
的符号‘(’
(不入栈) - 遇到( 入栈,并添加( 至输出字符串
- 遇到 )且栈不为空,说明匹配,弹栈,并添加 )到输出字符串
- 遇到 )且栈为空,说明到了外层括号,跳过1个外层括号,继续以上过程
class Solution {
public:
string removeOuterParentheses(string S) {
stack<char> stk;
string innerStr("");
for(int i = 1; i < S.size(); ++i)
{
if(S[i] == ')')
{
if(stk.empty())
{
i += 1;
continue;
}
else
{
innerStr.push_back(S[i]);
stk.pop();
}
}
else
{
stk.push(S[i]);
innerStr.push_back(S[i]);
}
}
return innerStr;
}
};