LeetCode:括号的分数【856】

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

题目分析

我们可以使用递归来解决这个问题。通过分析题目,我们发现有三种情况:

比如:

SCORE("()(()())")

  =SCORE("()")+SCORE("(()())")

  =1+2*SCORE("()()")

  =1+2*(SCORE("()")+SCORE("()"))

  =1+2*2

  =5

说明:

我们在代码中怎么来识别,(()())这种情况呢,如果从最左边到倒数第二位是不平衡的,那么加上最后一位一定是平衡的,这也说明,第一位和最后一位是一个大括号,那当然是CASE1这种情况。

Java题解

 

class Solution {
 public int scoreOfParentheses(String S) {
        return score(S,0,S.length()-1);
    }

    public int score(String S,int left,int right)
    {
        if(right-left==1)
            return 1;
        int b = 0;
        for(int i=left;i<right;i++)
        {
            if(S.charAt(i)=='(')
                b++;
            if(S.charAt(i)==')')
                b--;
            if(b==0)
                return score(S,left,i)+score(S,i+1,right);
        }
        return 2*score(S,left+1,right-1);
    }
}
posted @ 2018-11-13 10:41  子烁爱学习  阅读(336)  评论(0编辑  收藏  举报