题目地址:
https://leetcode.com/problems/remove-outermost-parentheses/
给定一个合法的括号序列,显然一个合法的括号序列可以分块若干个合法括号序列,要求去掉每一块的括号序列的最外层括号。
可以想象有一个栈,然后遍历字符串,遇到左括号都入栈,如果遇到右括号就看一下栈内是否只有一个元素了,如果是,则说明遇到了最外层括号。这样就可以把谁是最外层括号给筛选出来了。代码实现方面是不用维护一个栈的,只需要时刻记录栈的size即可。代码如下:
public class Solution {
public String removeOuterParentheses(String S) {
StringBuilder sb = new StringBuilder();
int leftCount = 0;
for (int i = 0; i < S.length(); i++) {
char ch = S.charAt(i);
// 遇到左括号就入栈,如果它不是唯一在栈内的元素,则说明其不是最外层的左括号,可以append;
// 遇到右括号就出栈,如果栈不空,则说明其不是最外层的右括号,可以append;
if (ch == '(') {
leftCount++;
if (leftCount != 1) {
sb.append('(');
}
} else {
leftCount--;
if (leftCount != 0) {
sb.append(')');
}
}
}
return sb.toString();
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。