LeetCode:括号的分数【856】
LeetCode:括号的分数【856】
题目描述
给定一个平衡括号字符串 S
,按下述规则计算该字符串的分数:
()
得 1 分。AB
得A + B
分,其中 A 和 B 是平衡括号字符串。(A)
得2 * A
分,其中 A 是平衡括号字符串。
示例 1:
输入: "()" 输出: 1
示例 2:
输入: "(())" 输出: 2
示例 3:
输入: "()()" 输出: 2
示例 4:
输入: "(()(()))" 输出: 6
提示:
S
是平衡括号字符串,且只含有(
和)
。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); } }