-
题目链接 https://leetcode-cn.com/problems/score-of-parentheses/submissions/
-
题目描述
-
给定一个平衡括号字符串
S
,按下述规则计算该字符串的分数: ()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括号字符串。(A)
得2 * A
分,其中 A 是平衡括号字符串。-
示例 1:
输入: "()" 输出: 1
示例 2:
输入: "(())" 输出: 2
示例 3:
输入: "()()" 输出: 2
示例 4:
输入: "(()(()))" 输出: 6
-
-
解题思路
- 模拟栈,遍历字符串S,"("时入栈,不然出栈,若栈顶元素为“(”时 入栈 1,否则就一直出栈直到栈顶为“(”,将所有出栈的元素加和乘2.最后返回栈元素的和。
-
代码
- python
class Solution: def scoreOfParentheses(self, S: str) -> int: st = [] for s in S: if s == '(': st.append(s) elif st[-1] == '(': st[-1] = 1 else: tmp = 0 while st[-1] != '(': tmp += st.pop() st[-1] = tmp * 2 return sum(st)
- c++(位运算代替乘法)
class Solution { public: int scoreOfParentheses(string S) { int res = 0, w = 0; for(int i = 0; i < S.length(); ++i){ if(S[i] == '(') w = w? w << 1: 1; else if(S[i - 1] == '('){ res += w; w >>= 1; }else w >>= 1; } return res; } };
- python
leetcode 856. 括号的分数
最新推荐文章于 2022-10-09 15:30:16 发布