A valid parentheses string is either empty ("")
, "(" + A + ")"
, or A + B
, where A
and B
are valid parentheses strings, and +
represents string concatenation. For example, ""
, "()"
, "(())()"
, and "(()(()))"
are all valid parentheses strings.
A valid parentheses string S
is primitive if it is nonempty, and there does not exist a way to split it into S = A+B
, with A
and B
nonempty valid parentheses strings.
Given a valid parentheses string S
, consider its primitive decomposition: S = P_1 + P_2 + ... + P_k
, where P_i
are primitive valid parentheses strings.
Return S
after removing the outermost parentheses of every primitive string in the primitive decomposition of S
.
Example 1:
Input: "(()())(())"
Output: "()()()"
Explanation:
The input string is "(()())(())", with primitive decomposition "(()())" + "(())".
After removing outer parentheses of each part, this is "()()" + "()" = "()()()".
Example 2:
Input: "(()())(())(()(()))"
Output: "()()()()(())"
Explanation:
The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))".
After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())".
Example 3:
Input: "()()"
Output: ""
Explanation:
The input string is "()()", with primitive decomposition "()" + "()".
After removing outer parentheses of each part, this is "" + "" = "".
Note:
S.length <= 10000
S[i]
is"("
or")"
S
is a valid parentheses string
题意:给出一个只包含"("和")"的字符串,其由若干个合法的小括号字符串组成。要求将每部分合法小字符串去掉最外层的括号再输出。
思路:设置一个计数器变量flag,当遇到"("时计数器加1,当遇到")"时计数器减1。当计数器的值为0时不输出字符,其余时刻输出字符即可。
class Solution {
public:
string removeOuterParentheses(string S) {
int flag=0;
string s;
for(int i=0;i<S.length();i++){
if(flag==0){
flag++;
continue;
}
if(S[i]=='('){
flag++;
s+=S[i];
}else{
flag--;
if(flag==0){
continue;
}else{
s+=S[i];
}
}
}
return s;
}
};
规范化代码:
class Solution {
public:
string removeOuterParentheses(string S) {
int flag=0;
string s;
for(int i=0;i<S.length();i++){
if(S[i]=='('&&flag++>0)
s+=S[i];
if(S[i]==')'&&flag-->1)
s+=S[i];
}
return s;
}
};