leetcode 1021. 刪除最外層的括號(Remove Outermost Parentheses)
阿新 • • 發佈:2019-04-22
輸入 拆分 字符 提示 outer 括號 nth prim parent
非空,且不存在將其拆分為
目錄
- 題目描述:
- 示例 1:
- 示例 2:
- 示例 3:
- 解法:
題目描述:
有效括號字符串為空 ("")
、"(" + A + ")"
或 A + B
,其中 A
和 B
都是有效的括號字符串,+
代表字符串的連接。例如,""
,"()"
,"(())()"
和 "(()(()))"
都是有效的括號字符串。
如果有效字符串 S
S = A+B
的方法,我們稱其為原語(primitive),其中 A
和 B
都是非空有效括號字符串。
給出一個非空有效字符串 S
,考慮將其進行原語化分解,使得:S = P_1 + P_2 + ... + P_k
,其中 P_i
是有效括號字符串原語。
對 S
進行原語化分解,刪除分解中每個原語字符串的最外層括號,返回 S
。
示例 1:
輸入:"(()())(())" 輸出:"()()()" 解釋: 輸入字符串為 "(()())(())",原語化分解得到 "(()())" + "(())", 刪除每個部分中的最外層括號後得到 "()()" + "()" = "()()()"。
示例 2:
輸入:"(()())(())(()(()))"
輸出:"()()()()(())"
解釋:
輸入字符串為 "(()())(())(()(()))",原語化分解得到 "(()())" + "(())" + "(()(()))",
刪除每隔部分中的最外層括號後得到 "()()" + "()" + "()(())" = "()()()()(())"。
示例 3:
輸入:"()()" 輸出:"" 解釋: 輸入字符串為 "()()",原語化分解得到 "()" + "()", 刪除每個部分中的最外層括號後得到 "" + "" = ""。
提示:
S.length <= 10000
S[i]
為"("
或")"
S
是一個有效括號字符串
解法:
class Solution {
public:
string removeOuterParentheses(string S) {
int val = 0;
int sz = S.size();
int l = 0;
string res = "";
for(int i = 0; i < sz; i++){
if(S[i] == '('){
val++;
}else if(S[i] == ')'){
val--;
if(val == 0){
res += S.substr(l+1, i - (l+1));
l = i+1;
}
}
}
return res;
}
};
leetcode 1021. 刪除最外層的括號(Remove Outermost Parentheses)