LeetCode 1021. Remove Outermost Parentheses

1021.Remove Outermost Parentheses(删除最外层的括号)

链接

https://leetcode-cn.com/problems/remove-outermost-parentheses/

题目

有效括号字符串为空 ("")"(" + A + ")"A + B,其中 AB 都是有效的括号字符串,+
代表字符串的连接。例如,"""()""(())()""(()(()))" 都是有效的括号字符串。

如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 AB
都是非空有效括号字符串。

给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i
是有效括号字符串原语。

S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S

示例 1:

  输入:"(()())(())"
  输出:"()()()"
  解释:
  输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
  删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。

示例 2:

  输入:"(()())(())(()(()))"
  输出:"()()()()(())"
  解释:
  输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
  删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。

示例 3:

  输入:"()()"
  输出:""
  解释:
  输入字符串为 "()()",原语化分解得到 "()" + "()",
  删除每个部分中的最外层括号后得到 "" + "" = ""。

提示:

  1. S.length <= 10000
  2. S[i]"("")"
  3. S 是一个有效括号字符串

思路

这个题目以前做过的,设定一个flag位为0,对于字符串进行遍历,遇到左括号flag增加,遇到右括号flag减少,当flag重新为0即代表括号到达最外层,满足消去条件,直到检索完字符串。

(这题我本来使用的是s.charAt(),之后发现性能较差,于是改变使用StringBuilder,用字符数组解决)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static String removeOuterParentheses(String S) {
StringBuilder password = new StringBuilder();
char[] word = S.toCharArray();
int val = 0;

for (int i = 0; i < word.length; i++) {
if (word[i] == '(') {
val++;
if (val != 1) {
password.append(word[i]);
}
} else {
val--;
if (val != 0) {
password.append(word[i]);
}
}
}
return password.toString();
}
---本文结束,感谢阅读---