![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f7605f165323868eddb6f60fed55dd10.png)
思路
- 这道题可以用栈来找出所有原语分解,然后对每个分解后的去除最左边和最右边的括号最后连在一起即可,但是这种复杂度较高。
- 由于题中说了S一定是合法的,我们就可以用统计左括号的个数的方法直接过滤掉每个原语的最外层括号。
代码实现
class Solution {
public String removeOuterParentheses(String s) {
Stack<Character> stack = new Stack<>();
char[] chars = s.toCharArray();
ArrayList<String> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (char c : chars) {
if (c == '(') {
stack.push('(');
sb.append("(");
} else if (c == ')') {
stack.pop();
sb.append(")");
}
if (stack.isEmpty()) {
list.add(sb.toString());
sb = new StringBuilder();
}
}
sb = new StringBuilder();
for (String str : list) {
sb.append(str.substring(1, str.length() - 1));
}
return sb.toString();
}
}
class Solution {
public String removeOuterParentheses(String s) {
int flag = 0;
StringBuilder sb = new StringBuilder();
char[] chars = s.toCharArray();
for(char c : chars) {
if(c == '(' && flag++ > 0) {
sb.append("(");
}
if(c == ')' && --flag > 0) {
sb.append(")");
}
}
return sb.toString();
}
}