leetcode--day-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 。

示例

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

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

解题思路

//c++
class Solution {
    string removeOuterParentheses(string s) {
        string s_t = "";
        int num_left = 0;//左括号个数
        int temp_i = 0;//左括号下标
        for (int i = 1; i < s.length(); i++) {
            if (s[i] == '(')
                num_left++;
            if (s[i] == ')') {
                if (!(num_left--)) {
                    s_t += s.substr(temp_i+1, i - temp_i-1);
                    temp_i = i + 1;
                }
            }
        }
        return s_t;
    }
};

这题比较简单。

你可能感兴趣的:(leetcode--day-3)