LeetCode 856. 括号的分数

Posted hlk09

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 856. 括号的分数相关的知识,希望对你有一定的参考价值。

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

  • () 得 1 分。
  • AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
  • (A) 得 2 * A 分,其中 A 是平衡括号字符串。

由于问题是递归定义的,所以可以很简单地用递归去解这个题。

用栈解决的话,如果遇到左括号,则入栈。如果遇到右括号,判断栈顶是不是右括号,如果是则说明是(),出栈并压数字1;否则说明是(A)型,将内部数字全部加起来再次入栈。最后栈内是各种数字,加起来就可以了。

class Solution {
public:
    int scoreOfParentheses(string S) {
        stack<string> s;
        for(char& i : S) {
            if(i == () {
                s.push("(");
            } else {
                if(!s.empty() && s.top() == "(") {
                    s.pop();
                    s.push("1");
                } else {
                    int sum = 0;
                    while(!s.empty() && s.top() != "(") {
                        sum += stoi(s.top());
                        s.pop();
                    }
                    if(!s.empty()) {
                        s.pop();
                    }
                    s.push(to_string(sum * 2));
                }
            }
        }
        int res = 0;
        while(!s.empty()) {
            res += stoi(s.top());
            s.pop();
        }
        return res;
    }
};

 

以上是关于LeetCode 856. 括号的分数的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—856. 括号的分数(栈)—day03

Leetcode刷题100天—856. 括号的分数(栈)—day03

leetcode 856. 括号的分数(Score of Parentheses)

LeetCode 856 括号的分数[栈] HERODING的LeetCode之路

LeetCode 856 括号的分数[栈] HERODING的LeetCode之路

LeetCode 870. 优势洗牌(根据数值对索引排序)/ 856. 括号的分数(栈) / 801. 使序列递增的最小交换次数(动态规划)