Leetcode 856:括号的分数

题目描述

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

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

示例 1:

输入: "()"
输出: 1

示例 2:

输入: "(())"
输出: 2

示例 3:

输入: "()()"
输出: 2

示例 4:

输入: "(()(()))"
输出: 6

提示:

  1. S 是平衡括号字符串,且只含有 ( 和 ) 。
  2. 2 <= S.length <= 50

解题思路

数构成平衡括号字符串的左括号的所在层数(连续的取最大深度),然后在结果上加上pow(2,i)

例如:

"( )"                                    左括号层数0,                    pow(2,0)

"( ) ( )"                                 左括号层数0,0                  pow(2,0)+pow(2,0)

"( ( ) )"                                左括号层数1                        pow(2,1)

"( ( ) ( ( ) ) )"                       左括号层数1,2                   pow(2,1)+pow(2,2)

"( ( ) ( ( ) ) ) ( ( ( ( ) ) ) )"     左括号层数1,2,3              pow(2,1)+pow(2,2)+pow(2,3)

int scoreOfParentheses(string S) {
        int len = S.length();
        int pre = 0,now = 0,i = 0;
        int ans = 0;
        while(i < len){
            while(i<len && S[i] == '('){
                i++;
                now++;
            }
            ans += pow(2,now-1);
            while(i<len && S[i] == ')'){
                i++;
                now--;
            }
        }
        return ans;
    }

猜你喜欢

转载自blog.csdn.net/weixin_35338624/article/details/89319609