zoukankan      html  css  js  c++  java
  • (栈)leetcode856 Score of Parentheses

    Given a balanced parentheses string S, compute the score of the string based on the following rule:

    • () has score 1
    • AB has score A + B, where A and B are balanced parentheses strings.
    • (A) has score 2 * A, where A is a balanced parentheses string.

    Example 1:

    Input: "()"
    Output: 1
    

    Example 2:

    Input: "(())"
    Output: 2
    

    Example 3:

    Input: "()()"
    Output: 2
    

    Example 4:

    Input: "(()(()))"
    Output: 6
    

    Note:

    1. S is a balanced parentheses string, containing only ( and ).
    2. 2 <= S.length <= 50

    这个可以利用栈,在官方题解上:

    Intuition and Algorithm

    Every position in the string has a depth - some number of matching parentheses surrounding it. For example, the dot in (()(.())) has depth 2, because of these parentheses: (__(.__))

    Our goal is to maintain the score at the current depth we are on. When we see an opening bracket, we increase our depth, and our score at the new depth is 0. When we see a closing bracket, we add twice the score of the previous deeper part - except when counting (), which has a score of 1.

    For example, when counting (()(())), our stack will look like this:

    • [0, 0] after parsing (
    • [0, 0, 0] after (
    • [0, 1] after )
    • [0, 1, 0] after (
    • [0, 1, 0, 0] after (
    • [0, 1, 1] after )
    • [0, 3] after )
    • [6] after )

    C++代码:

    class Solution {
    public:
        int scoreOfParentheses(string S) {
            stack<int> s;
            s.push(0);
            for(char c:S){
                if(c == '(')
                    s.push(0);
                else{
                    int v = s.top();
                    s.pop();
                    int w = s.top();
                    s.pop();
                    s.push(w + max(2*v,1));
                }
            }
            return s.top();
        }
    };
  • 相关阅读:
    跟踪创建类的个数
    动手动脑3
    动手动脑:随机数发生器和函数重载
    统计英语文章中单词
    动手动脑(1)
    原码、反码、补码
    java测试ATM自助操作系统
    深入浅出 TCP/IP 协议栈
    十大经典排序算法(动图演示)
    深入浅出 Viewport 设计原理
  • 原文地址:https://www.cnblogs.com/Weixu-Liu/p/10582580.html
Copyright © 2011-2022 走看看