C++ Algorithm to Remove Outermost Parentheses
- 时间:2020-10-05 13:15:44
- 分类:网络文摘
- 阅读:147 次
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
Tracking the Depth of the Parenthesses
Given the lengthy description, however, the solution is very intuitive/straightforward, i.e. keeping tracks of the depths and ignoring the first level.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Solution { public: string removeOuterParentheses(string S) { string r = "", cur = ""; int depth = 0; for (int i = 0; i < S.size(); ++ i) { if (S[i] == '(') { depth ++; if (depth > 1) { cur += "("; } } else { depth --; if (depth == 0) { r += cur; cur = ""; } else { cur += ")"; } } } return r; } }; |
class Solution {
public:
string removeOuterParentheses(string S) {
string r = "", cur = "";
int depth = 0;
for (int i = 0; i < S.size(); ++ i) {
if (S[i] == '(') {
depth ++;
if (depth > 1) {
cur += "(";
}
} else {
depth --;
if (depth == 0) {
r += cur;
cur = "";
} else {
cur += ")";
}
}
}
return r;
}
};When we meet a left parenthess, we increment the depth, otherwise we decrement the depth i.e. for right parenthess. When the depth is zero for ‘)’, we need to concatenate the inner parenthesses and reset the parenthesses string. The space complexity is O(1) constant and the time complexity for above C++ implementation is O(N) where N is the length of the given input, i.e. a valid parenthesses string.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:吃葡萄、喝葡萄酒能帮助调节性功能 绿茶、红茶、青茶、黑茶、白茶和黄茶 奶茶多添加奶精 长期食用会引发心脏病 奶茶调查:街头奶茶店调香味多用奶精 适合秋天食用的养肺食谱可滋阴润肺 哪些食物可以起到止咳润肺的作用 食物的禁忌:中医如何区分食物的寒热性 味道鲜美营养丰富的黑木耳最佳吃法 怎样食用萝卜可以治咳嗽使症状缓解 柚子营养价值高多吃对健康大有益处
- 评论列表
-
- 添加评论