zoukankan      html  css  js  c++  java
  • 括号的分数

    题目信息

    给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:
        () 得 1 分。
        AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。
        (A) 得 2 * A 分,其中 A 是平衡括号字符串。
    示例1:
        输入: "()"
        输出: 1
    示例2:
        输入: "(())"
        输出: 2
    示例3:
        输入: "()()"
        输出: 2
    示例4:
        输入: "(()(()))"
        输出: 6
    
    提示:
    S 是平衡括号字符串,且只含有 ( 和 ) 。
    2 <= S.length <= 50

    解题思路

    如果是(),就为1,如果并列的()()为1+1,如果(())包含的关系则为2*1
    主要是还是模拟栈的方式解决,初始化栈顶元素为0,当为左括号时候push一个0元素进栈,
    当为右括号时候取栈顶的元素为m,n,此时的值应为n + max(2 * m, 1),取出2 * m 和1中的最大值

    代码

    // 括号的分数
    class Stack {
        private var array = [Int]();
        func pop() -> Int {
            if array.isEmpty {
                return 0;
            }
            return array.removeLast();
        }
        func push(x: Int) -> Void {
            return array.append(x);
        }
    }
    
    func scoreOfParentheses(_ S: String) -> Int {
        let stack = Stack();
        stack.push(x: 0);
        for char in S {
            if char == "(" {
                stack.push(x: 0);
            } else {
                let m = stack.pop();
                let n = stack.pop();
                stack.push(x: n + max(2 * m, 1));
            }
        }
        return stack.pop();
    }

    题目链接

  • 相关阅读:
    AngularJS XMLHttpRequest
    AngularJS服务
    angularJS过滤器
    AngularJ控制器
    angular Scope(作用域)
    angular Model 指令
    angular指令
    微信小程序调用微信支付
    微信小程序一直保持登陆状态
    微信小程序ajax请求数据及一些方法
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/12809300.html
Copyright © 2011-2022 走看看