LeetCode刷题之1021. 删除最外层的括号
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
-
题目:
有效括号字符串为空""
、"(" + 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 :
输入: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
。