题目:
示例:
代码:
- 解法一
class Solution {
public String removeOuterParentheses(String S) {
StringBuilder sb = new StringBuilder();
int count = 0; //标记“(”未配对的个数
for(char c : S.toCharArray()) {
if (c == '(') {
if (count > 0) {
sb = sb.append(c);
}
count ++;
} else {
count --;
if (count > 0) {
sb = sb.append(c);
}
}
}
return sb.toString();
}
}
- 解法二
class Solution {
public String removeOuterParentheses(String S) {
StringBuilder ans = new StringBuilder();//可变长的字符串
Stack<Character> stack = new Stack<>();//初始化一个栈
int start = 0;// 初始化原语的起始位置
int end = 0;// 初始化原语的结束位置
boolean flag = false;// 标志每个原语
int len=S.length();
for (int i = 0;i < len;i++) {//遍历字符串
char ch = S.charAt(i);
if (ch == '(') {// 遇到左括号,入栈
stack.push(ch);
if (!flag) {// 遇到的第一个左括号,是原语的开始位置,记录下原语开始位置
start = i;
flag = true;
}
}
if (ch == ')') {// 遇到右括号,出栈
stack.pop();
if (stack.isEmpty()) {// 当栈空的时候,找到了一个完整的原语
end = i;// 记录下结束位置
ans.append(S.substring(start + 1,end));// 去掉原语的最外层括号,并追加到答案中
flag = false;// 置标志为false,往后接着找下一个原语
start = end;// 往后找,再次初始化原语开始位置
}
}
}
return ans.toString();
}
}