LeetCode856:括号的分数

    xiaoxiao2023-10-24  166

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

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

    示例 1:

    输入: "()" 输出: 1

    示例 2:

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

    示例 3:

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

    示例 4:

    输入: "(()(()))" 输出: 6 提示: S 是平衡括号字符串,且只含有 ( 和 ) 。2 <= S.length <= 50

    解析:

       该题目首先要找到规律,我找到的规律是:两个相邻字符如果能组成括号,则它的最终值是2^(它的外层括号数)。然后将所有的值加起来。需要用栈存储字符的下标,用于后续的比较。

    代码:

    int scoreOfParentheses(string S) { stack<int>index; int sum = 0; for (int i = 0; i < S.length(); i++) { if (index.empty()) index.push(i); else if (S[i] == ')') { if (i - index.top() == 1)//判断是否是相邻字符形成括号 { index.pop(); sum += pow(2, int(index.size())); } else index.pop(); } else { index.push(i); } } return sum; }

     

    最新回复(0)