Problem
Given a balanced parentheses string S, compute the score of the string based on the following rule:
()has score 1ABhas scoreA + B, where A and B are balanced parentheses strings.(A)has score2 * A, where A is a balanced parentheses string.
Example 1:
1  | Input: "()"  | 
Example 2:
1  | Input: "(())"  | 
Example 3:
1  | Input: "()()"  | 
Example 4:
1  | Input: "(()(()))"  | 
Note:
Sis a balanced parentheses string, containing only(and).2 <= S.length <= 50
Analysis
这道题目要求对给定的括号字符串进行计分,括号成对算分,规则如下:
- 单对括号:计1分;
 - 并排括号:分数相加;
 - 包含括号:分数乘2。
 
因为要处理包含的部分,所以采用递归来做。我们找出最外层匹配的括号,然后对里面的内容进行递归,求出分数后,再乘2。并列关系的直接相加即可。这里的问题就转化为:如何找出最外层匹配的括号,然后对里面的内容进行递归。
  因为题目给出的括号类型只有一种,所以我们可以用简单的计数器的形式去找到匹配的括号,遇到(自增,遇到)自减,如果计数器重置为0,说明找到一对匹配的括号,然后对其中的内容进行递归即可。
Solution
  有一个注意点,如果括号里面是空,那么递归的结果会是0,此时因为递归结束后要乘2,如果是0的话这个分数就不对了,所以要用一个max(2 * cur, 1)。
Code
1  | class Solution {  | 
Summary
这道题目是括号题目的一个变种题,其重点不再是括号的匹配,而是对匹配的括号计算分数,但也利用到了使用计数器进行匹配的技巧。同时,对于字符串中有包含关系的逻辑,可以优先考虑用递归解决。这道题目的分享到这里,谢谢您的支持!