返回 AI 资讯
社区讨论LinuxDo 最新

Leetcode每日一题 —— 856. 括号的分数

力扣 LeetCode 856. 括号的分数 - 力扣(LeetCode) 856. 括号的分数 - 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 A 分,其中 A 是平衡括号字符串。 示例 1: 输入: "()" 输出: 1 示例 2: 输入: "(())" 输出: 2 示例 3: 输入: "()()" 输出: 2 示例 4: 输入: "(()(()))" 输出: 6 提示: 1.... 思路 栈应…

内容摘要

作者:#SomeBottle 板块:#开发调优 力扣 LeetCode 856. 括号的分数 - 力扣(LeetCode) 856. 括号的分数 - 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: * () 得 1 分。 * AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 * (A) 得 2 * A 分,其中 A 是平衡括号字符串。   示例 1: 输入: "()" 输出: 1 示例 2: 输入: "(())" 输出: 2 示例 3: 输入: "()()" 输出: 2 示例 4: 输入: "(()(()))" 输出: 6   提示: 1.... 思路 栈应用题,表达式解析。 实际上我们只用在栈中维护得分以及标记出现的左括号,这里咱用 -1 来标记了左括号。遇到右括号时就可以开始弹栈,直至遇到左括号 (-1) 为止的分数都可以相加起来得到 sum,这个 sum 就是当前这一对括号的内层分数,需要计算 \mathrm{sum} \times 2。但注意内层可能没有括号,所以取的是 \max(\mathrm{sum} \times 2,\ 0)。 最后位于最外层,把栈中剩余的分数累加即可。 代码 class Solution { public: int scoreOfParentheses(string s) { // 保证 s 是闭合的括号 // 维护一个存储得分的栈 stack<int> stk; for(int i=0;i<s.size();i++){ if(s[i]=='('){ // 栈中用 -1 标记左括号 stk.emplace(-1); }else if(s[i]==')'){ // 遇到右括号,弹栈直至遇到左括

资讯来源

LinuxDo

原文链接

打开原文