Medium
Reverse Substrings Between Each Pair of Parentheses — Python
Full explanation · Time O(n) · Space O(n)
# Time: O(n)
# Space: O(n)
class Solution(object):
def reverseParentheses(self, s):
"""
:type s: str
:rtype: str
"""
stk, lookup = [], {}
for i, c in enumerate(s):
if c == '(':
stk.append(i)
elif c == ')':
j = stk.pop()
lookup[i], lookup[j] = j, i
result = []
i, d = 0, 1
while i < len(s):
if i in lookup:
i = lookup[i]
d *= -1
else:
result.append(s[i])
i += d
return "".join(result)
# Time: O(n^2)
# Space: O(n)
class Solution2(object):
def reverseParentheses(self, s):
"""
:type s: str
:rtype: str
"""
stk = [[]]
for c in s:
if c == '(':
stk.append([])
elif c == ')':
end = stk.pop()
end.reverse()
stk[-1].extend(end)
else:
stk[-1].append(c)
return "".join(stk.pop())