python怎么表示分数,856. 括号的分数(Python)

难度:★★★☆☆

类型:字符串

方法:栈

力扣链接请移步本题传送门

更多力扣中等题的解决方案请移步力扣中等题目录

j题目

给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:

() 得 1 分。

AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。

(A) 得 2 * A 分,其中 A 是平衡括号字符串。

示例 1:

输入: "()"

输出: 1

示例 2:

输入: "(())"

输出: 2

示例 3:

输入: "()()"

输出: 2

示例 4:

输入: "(()(()))"

输出: 6

提示:

S 是平衡括号字符串,且只含有 ( 和 ) 。

2 <= S.length <= 50

解答

括号的问题可以用栈解决。题目中已经说明括号字符串是合法的,我们无需考虑别的。

括号存在包含关系时内部分数乘以2,存在并列关系时分数相加。

我们准备一个栈,栈里存储的是括号分数,从左到右遍历括号,每当遇到一个左括号,则把数字0压入栈中,每当遇到一个右括号,弹出栈顶元素,做以下处理:

如果被弹出的栈顶元素是零,说明这个零是刚刚被压入栈中的,当前的右括号直接与其对应的左括号相邻,当前元素的分数记录为1;

如果被弹出栈顶的元素不是零,说明当前右括号与其对应的左括号隔着一些括号,这时弹出的栈顶元素需要乘以2。

将计算得到的数字与栈顶元素相加,因为存在并列关系。

class Solution(object):

def scoreOfParentheses(self, S):

stack = [0]

for x in S:

if x == '(':

stack.append(0)

else:

v = stack.pop()

stack[-1] += 1 if v == 0 else 2 * v

return stack.pop()

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值