Leetcode 括号的分数 -- 栈

2023-11-18

题目描述

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

解法一:括号匹配统计

  • 只有连续的左右括号( )才对结果有贡献
  • 遇见 ( ,深度n+1,当深度为n,遇见连续的( ),结果需要加上2^n
  • 遇见 ),深度-1

python代码实现:

class Solution(object):
    def scoreOfParentheses(self, S):
        ans, deep = 0, 0
        for i, x in enumerate(S):
            if x == '(':
                deep += 1
            else:
                deep -= 1
                if S[i-1] == '(':
                    ans += 1 << deep
        return ans

时间复杂度:O(N) ,其中 N 是字符串 S 的长度。
空间复杂度:O(1)。

解法二: 栈

  • 构建一个栈
  • 如果遇到 ( 就往栈里面添加
  • 如果遇到 ) 就去寻找最近的左括号抵消,同时计算里面的分数。
    以(()(()))示例, 栈结构变化如下
    在这里插入图片描述

python代码实现:

class Solution:
    def scoreOfParentheses(self, S: str) -> int:
        count = 0
        stack = [0] #The score of the current frame
        for x in S:
            if x == '(':
                stack.append(0)
            else:
                count = stack.pop()
                stack[-1] += 1 if count == 0 else 2*count
        return stack.pop()

时间复杂度:O(N),其中 N是字符串 S 的长度。
空间复杂度:O(N),为栈的大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode 括号的分数 -- 栈 的相关文章

随机推荐

  • 系统烧写方法(MfgTool烧写工具)

    目录 MfgTool 工具简介 MfgTool 工作原理简介 USB接线 系统烧写原理 烧写NXP 官方系统 烧写自制的系统 系统烧写 网络开机自启动设置 改造我们自己的烧写工具 改造MfgTool 烧写测试 解决Linux 内核启动失败
  • JDK8新特性----lambda表达式

    一 Lambda表达式 1 Lambda表达式 注意 函数式接口 接口中只有一个抽象方法 参数1 参数2 抽象方法的参数 gt 分隔符 表示抽象方法的实现 1 lambda基本用法 package com wt practice lx01
  • Java 反射机制(二)

    前言 在上篇 Java 反射机制 一 介绍了一些 Java 反射相关的常用 API 在知道了如何去使用反射之后 作为一个合格的工程师 下一步肯定是要去了解它的如何实现的 我们今天就来看看在 JDK 源码中是如何去实现反射的 PS 以下源码分
  • docker查看mysql日志_如何查看docker运行日志

    查看docker运行日志的方法介绍 docker attach命令 docker attach options 容器会连接到正在运行的容器 然后将容器的标准输入 输出和错误流信息附在本地打印出来 命令中options的取值有三种 detac
  • 护网蓝队(初级)

    护网蓝队 初级 主要是会看各种攻击payload 注意常见的payload 练习各种漏洞的利用方法 学会看利用漏洞的请求长什么样 payload长什么样 payload长什么样 给个请求包 能不能认出来是攻击流量 是的话是什么漏洞的利用 蓝
  • 树09--二叉树的下一个结点

    树09 二叉树的下一个结点 jz57 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一个二叉树其中的一个结点 请找出中序遍历顺序的下一个结点并且返回 注意 树中的结点不仅包含左右子结点 同时包含指向父结点的next指针
  • Qt 信号连接多个槽函数 执行顺序

    执行顺序 同一信号连接多个槽呢 槽函数执行没有绝对的先后顺序 如 connect slider QSlider valueChanged spin box QSpinBox setValue connect slider QSlider v
  • 读研期间小论文投稿-个人总结

    我是2014级研究生 学校只是一个普通211 而且工科很弱 导师对我是放养 让我回忆下 上学期就见过她一次 而且她快退休了 没项目没经费没权利 但我觉得跟着她还挺好 因为我可以自己研究自己喜欢的 没人妨碍 但同时导师没有基金 所以我的小论文
  • 两个linux服务器间复制文件

    scp是secure copy的简写 用于在Linux下进行远程拷贝文件的命令 和它类似的命令有cp 不过cp只是在本机进行拷贝不能跨服务器 1 命令格式 scp 参数 原路径 目标路径 2 命令实例 从本地服务器复制到远程服务器 1 复制
  • Vue使用Swiper看这一篇就够了

    Vue使用Swiper看这一篇就够了 此案例实现需求 完成swiper动态异步数据下的slide渲染 自定义分页器样式 解决loop true设置时的事件丢失问题 swiper鼠标移入 移出 暂停 开始轮播 单页面渲染多个swiper组件互
  • 什么是区块链概念

    区块链到底有什么价值 区块链技术被称为价值互联网 大体上原因在于它解决了原有互联网的三个基本问题 第一 区块链通过在数字货币领域的应用 提供了资金流 或者叫资本流 信息在互联网的流动的解决方案 第二 区块链通过加密和分布式账本的引用 解决了
  • 关于Visual Studio 不支持x64 内联汇编分析

    记录一下今天的大坑 实在是有必要记录一下 调程序发现参数在函数传递时 出现了异常的值 已经确认不是指针破坏的问题 用汇编看了下 发现汇编寄存器地址都取错了 在release开启o2优化时出现 关掉又正常 实在是百思不得其解 对于内联汇编 其
  • Mysql根据拼音首字母分组和排序

    最近业务上有个需求 需要根据英文字母展示对应的人名 和我们手机的通讯录差不多 如下图所示 通常如果表设计的时候增加了对应的首字母字段应该很好实现 那如果没加 应该怎么实现呢 图示Sql SELECT name ELT INTERVAL CO
  • Java FileOutputStream类

    文章目录 总结 FileOutputStream类数据结构 FileOutputStream类方法 构造方法 操作方法 总结 FileOutputStream类用于将数据写入文件或文件描述符的输出流 FileOutputStream用于写入
  • 如何查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤 第一步 点击电脑左下角的 开始 然后再点击 运行 第二步 在运行窗口里填入 cmd 然后点击确定 第三步 在cmd命令窗口输入 ipconfig ALL 命令 点击键盘上的回车键 第
  • 2021年字节跳动+京东+美团面试总结!内含福利

    开篇 说一下我大概的情况 渣本毕业 工作已经有快3年了 从高中就开始玩小破站 无论是学习还是日常放松都是在b站 大学主学的软件技术专业 所以 入职bilibili是我大学时期给自己定的小目标 在学校 专业学的算中上的水平 课本知识和老师讲的
  • delphi with do和for do语句

    1 with 对象名 do语句只是为了减少输入的字符 不必每次重复名字 直接写变量 procedure TForm1 Button1Click Sender TObject 正常写法beginedit1 text hello edit1 c
  • J1939协议与CAN2.0对应关系

  • python贪吃蛇小游戏,面向对象设计模式,附带源码以及所需素材

    在python中通过面向对象设计模式来实现一个贪吃蛇小游戏 源码在最下方 上传的资源包内也包括代码源文件以及所需素材等 源文件在game文件夹内 exe文件可直接运行 pygame模块需要自行下载 先来看运行效果图 开始界面 点击按钮开始游
  • Leetcode 括号的分数 -- 栈

    题目描述 leetcode 856 括号的分数 给定一个平衡括号字符串 S 按下述规则计算该字符串的分数 得 1 分 AB 得 A B 分 其中 A 和 B 是平衡括号字符串 A 得 2 A 分 其中 A 是平衡括号字符串 示例 1 输入