856. Score of Parentheses

116 阅读1分钟

Medium

Given a balanced parentheses string s, return the score of the string.

The score of a balanced parentheses string is based on the following rule:

  • "()" has score 1.
  • AB has score A + B, where A and B are balanced parentheses strings.
  • (A) has score 2 * A, where A is a balanced parentheses string.

 

Example 1:

Input: s = "()"
Output: 1

Example 2:

Input: s = "(())"
Output: 2

Example 3:

Input: s = "()()"
Output: 2

 

Constraints:

  • 2 <= s.length <= 50
  • s consists of only '(' and ')'.
  • s is a balanced parentheses string.

答案

func scoreOfParentheses(s string) int {
	cur := 0
	stack := make([]int, 0)

	max := func(a,b int) int{
		if a > b {
			return a
		}
		return b
	}

	for _, e := range s {
		if e == '(' {
			stack = append(stack, cur)
			cur = 0
		} else {
			pop := stack[len(stack)-1]
			stack = stack[:len(stack)-1]
			//内层值最少为1
			cur = pop + max(cur * 2 ,1)
		}
	}
	return cur
}