文章目录
- 1. 题目
- 2. 解题
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){//跳过i=0的外层括号(if(S[i] == ')'){if(stk.empty())//不能匹配,说明是外层{i += 1;//跳过外层continue;}else{innerStr.push_back(S[i]);stk.pop();}}else// S[i] == '('{stk.push(S[i]);innerStr.push_back(S[i]);}}return innerStr;}
};