首页 > 其他 > 详细

856. Score of Parentheses

时间:2021-04-09 00:02:21      阅读:24      评论:0      收藏:0      [点我收藏+]

思路:
这道题有个要求就是(A)的得分要乘2,那这就有个问题了,如何记录一个括号之间有多少分呢,又该如何记录以前的分数,并能区分不是一个括号里面的之前算出来的分数。
又因为我们可能回下意识的把栈定义为char类型把‘(‘放入栈里,这样就没思路了。
考虑题目说给的string一定是平衡括号对,所以我们用0代替‘(’,栈是int类型,那么我们同时可以存放获得的分数了,只要遍历到的s不是‘(‘,并且栈顶元素是0,那么我们就pop掉栈顶元素,并将1分push进去,如果栈顶元素不是0,那么我们就遇到了(A)这种情况了,定义一个sum,用来求和得到A,通过while,条件为栈顶元素不为0,循环结束就得到了A,我们在A*2后push进栈。那么当S遍历结束,所有结果都在栈里面,我们在取出来即可。
因为()()的存在,我们不能直接返回st.top的值,因为这种情况:当完成第一个平衡括号对,并加入下一个‘(‘时栈为[1,0],最后栈为[1,1],所以最后要取出栈里所有值求和。

代码:

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

856. Score of Parentheses

原文:https://www.cnblogs.com/Mrsdwang/p/14635005.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!