Given a balanced parentheses string S
, compute the score of the string based on the following rule:
()
has score 1AB
has 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:
S
is 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)