Leetcode 856.括号的分数
1 题目描述(Leetcode题目链接)
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
- () 得 1 分。
- AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
- (A) 得 2 * A 分,其中 A 是平衡括号字符串。
输入: "()"
输出: 1
提示:
- S 是平衡括号字符串,且只含有 ( 和 ) 。
- 2 <= S.length <= 50
2 题解
用栈模拟了一下。
class Solution:
def scoreOfParentheses(self, S: str) -> int:
stack = []
for char in S:
if char == "(":
stack.append(char)
else:
if stack[-1] == "(":
stack.pop()
stack.append(1)
else:
a = stack.pop()
stack.pop()
stack.append(2*a)
if len(stack) >= 2 and stack[-2] != "(":
stack[-2] += stack[-1]
stack.pop()
return stack[0]
还是官方题解的栈写得漂亮。
class Solution(object):
def scoreOfParentheses(self, S):
stack = [0]
for x in S:
if x == '(':
stack.append(0)
else:
v = stack.pop()
stack[-1] += max(2 * v, 1)
return stack.pop()
求2*()的累加和。
class Solution(object):
def scoreOfParentheses(self, S):
ans = bal = 0
for i, x in enumerate(S):
if x == '(':
bal += 1
else:
bal -= 1
if S[i-1] == '(':
ans += 1 << bal
return ans
还有用eval的,效率不高就是了
class Solution(object):
def scoreOfParentheses(self, S):
return eval(S.replace(')(',')+(').replace('()','1').replace('(','2*('))