LeetCode刷题之1021. 删除最外层的括号

LeetCode刷题之1021. 删除最外层的括号

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    有效括号字符串为空 """(" + A + ")"A + B ,其中 AB 都是有效的括号字符串,+ 代表字符串的连接。

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

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

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

  • 示例

示例 1 :
输入:s = "(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
示例 2 :
输入:s = "(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
示例 3 :
输入:s = "()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
  • 提示
    • 1 <= s.length <= 10^5
    • s[i] 为 '('')'
    • s 是一个有效括号字符串
  • 代码1:
class Solution:
    def removeOuterParentheses(self, s: str) -> str:
        result = ""
        a = ""
        temp = []
        for i in s:
            if i == '(':
                temp += i
                a = a + i
            if i == ')':
                a = a + i
                temp.pop()
                if temp == []:
                    a = a[1:-1]
                    result += a
                    a = ""
        return result
# 执行用时:36 ms, 在所有 Python3 提交中击败了75.86%的用户
# 内存消耗:15.1 MB, 在所有 Python3 提交中击败了47.82%的用户
  • 算法说明:
    遍历字符串s,如果元素是‘(’,将其入栈temp,并存入a中;如果元素是‘)’,出栈temp,并将当前元素存入a中,同时判断temp是否为空,如果不是空的,继续循环遍历;如果为空,说明a形成一个原语,将其附加到result中,进入下一次循环。最后返回结果result
上一篇:1021 个位数统计


下一篇:【leetcode_easy_stack】1021. Remove Outermost Parentheses