码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 856. 括号的分数

时间:2018-10-01 19:11:30      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:说明   简单   pre   字符串   括号   int   eof   code   leetcode   

给定一个平衡括号字符串 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. 括号的分数

标签:说明   简单   pre   字符串   括号   int   eof   code   leetcode   

原文地址:https://www.cnblogs.com/hlk09/p/9735283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!