该题解采用了栈的数据结构来分析和计算括号字符串的分数。对于遇到的每个'(',直接将其压入栈中;对于每个')',首先尝试弹出栈顶元素直到遇到'(',累加这些元素的值作为当前括号内部的分数(如果栈顶是'(',则内部分数为0)。之后,将'('弹出栈,并根据内部的分数来决定将1(如果内部分数为0)还是2倍内部分数(如果内部分数不为0)压入栈中。最后,栈中剩余的数值为不同部分的分数,将这些数值累加即得到最终的分数。
时间复杂度: O(n)
空间复杂度: O(n)
class Solution:
def scoreOfParentheses(self, s: str) -> int:
stack = [] # 初始化一个栈
for c in s: # 遍历输入字符串
if c == '(': # 如果字符是'(',将其压入栈
stack.append(c)
else: # 如果字符是')'
cur = 0 # 初始化当前内部分数
while len(stack) > 0 and stack[-1] != '(': # 弹出所有数值元素直到遇到'('
cur += stack.pop()
stack.pop() # 弹出'('
if cur == 0: # 如果内部分数为0,说明是空的括号对'()'
stack.append(1) # 分数为1
else: # 否则,括号内有内容
stack.append(cur * 2) # 分数翻倍
return sum(stack) # 返回栈中所有分数的总和