Given a balanced parentheses string S, compute the score of the string based on the following rule:
()has score 1ABhas scoreA + B, where A and B are balanced parentheses strings.(A)has score2 * A, where A is a balanced parentheses string.
Example 1:
Input: "()"
Output: 1
Example 2:
Input: "(())"
Output: 2
Example 3:
Input: "()()"
Output: 2
Example 4:
Input: "(()(()))"
Output: 6
Note:
Sis a balanced parentheses string, containing only(and).2 <= S.length <= 50
------------------------------------------------------
反应有点慢,刚开始没有想清楚栈里放哪些东西,扔了4项,后面减成2项。
class Solution:
def scoreOfParentheses(self, S: str) -> int:
sta,l = [],len(S)
for i in range(l):
if (S[i] == '('):
sta.append((0,0)) #type,val
elif (S[i] == ')'):
cur = 0
while (True):
type,val = sta.pop()
if (type == 0 and cur == 0):
sta.append((1,1)) #type,val
break
elif (type == 0 and cur > 0):
sta.append((1,cur*2)) #type,val
break
else:
cur += val
return sum(item[1] for item in sta)
这种问题还可以用栈顶元素来控制层次,以下是一种更简洁的解法:
class Solution:
def scoreOfParentheses(self, S: str) -> int:
sta,l = [],len(S)
for i in range(l):
if (S[i] == '('):
sta.append(0)
elif (S[i] == ')'):
cur = 0
while (sta[-1] > 0):
cur += sta.pop()
sta[-1] = 1 if cur == 0 else cur*2
return sum(sta)

本文介绍了一种计算平衡括号字符串分数的方法,通过解析输入字符串并利用栈数据结构,实现高效计算。文章提供了两种实现方式,详细解释了如何通过栈记录括号层次,最终计算出总分数。
907

被折叠的 条评论
为什么被折叠?



