首页 > 其他分享 >1249. 移除无效的括号(stack)

1249. 移除无效的括号(stack)

时间:2024-04-19 23:11:53浏览次数:24  
标签:ok lee 括号 字符串 移除 1249 stack

   

给你一个由 '('')' 和小写字母组成的字符串 s

你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。

请返回任意一个合法字符串。

有效「括号字符串」应当符合以下 任意一条 要求:

  • 空字符串或只包含小写字母的字符串
  • 可以被写作 ABA 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
  • 可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」

 

示例 1:

输入:s = "lee(t(c)o)de)"
输出:"lee(t(c)o)de"
解释:"lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。

示例 2:

输入:s = "a)b(c)d"
输出:"ab(c)d"

示例 3:

输入:s = "))(("
输出:""
解释:空字符串也是有效的


具体来说就是从头开始向后进行扫描,对于当前字符:

1、若该字符为左括号,那么将其加入到栈中

2、若该字符为右括号,那么需要判断此时栈中是否有左括号。若有,则这两个括号就是一对,于是需要将栈顶的括号弹出,否则说明当前括号是非法的,需要将其移除

3、其他情况,直接忽略掉然后继续向后扫描即可

 

扫描完成后,若栈不为空,说明栈中有若干多余的非法左括号,因此也需要将这些括号移除

 

class Solution:
    def minRemoveToMakeValid(self, s: str) -> str:

        stack = []
        not_ok = []
        for i in range(len(s)):
            ch = s[i]
            if ch == '(':
                stack.append(i)
            elif ch == ')':
                if stack:
                    stack.pop()
                else:
                    not_ok.append(i)
        while stack:
            not_ok.append(stack.pop())
        
        res = []
        for i in range(len(s)):
            if i not in set(not_ok):
                res.append(s[i])
        return res

 





标签:ok,lee,括号,字符串,移除,1249,stack
From: https://www.cnblogs.com/zle1992/p/18146965

相关文章

  • netdom 是一个 Windows 命令行工具,用于管理 Windows 计算机和域的成员身份。它提供了
    netdom/?此命令的语法是:NETDOMHELP命令   -或-NETDOM命令/帮助  可用的命令有:  NETDOMADD       NETDOMRESETPWD    NETDOMRESET  NETDOMCOMPUTERNAME  NETDOMQUERY      NETDOMTRUST  NETDOMHELP......
  • JS 移除对象数组中,属性值全为空的项
    constarray=[{id:1,name:'John',age:25},{id:2,name:'Alice',age:null},{id:3,name:'Bob',age:undefined},{id:4,name:'Eve',age:''},{id:5,name:'',age:......
  • openstack-新增nova节点
    1.改IPvi/etc/sysconfig/network-scripts/ifcfg-ens3TYPE=EthernetBOOTPROTO=staticDEFROUTE=yesNAME=ens3DEVICE=ens3ONBOOT=yesIPADDR=172.17.10.53NETMASK=255.255.255.128GATEWAY=172.17.10.1DNS1=202.96.128.86DNS2=114.114.114.1142.设置主机名hostnamectl......
  • Visual Studio 工具箱报错:未能加载工具箱项,将从项目中移除(转)
    未能加载工具箱项1篇文章0订阅订阅专栏我是在使用AnyCpu模式下,出现上面的错误,因为我目标平台设置的是X64解决办法:只需要把【项目名称右键->属性->生成->目标平台】设置成AnyCpu,一开始我设置的X64,因为有些第三方Nuget包不允许在X86下运行,所以为了使程序在X64下运行,把目标平台......
  • Ubuntu20.04开机黑屏左上角光标闪烁,以及移除Nvidia驱动后造成的无法启动docker容器问
      这几天系统更新,显卡驱动由525.147.05升级到了535.171.04(tested),终端运行watch-n1nvidia-smi实时显示显卡占用情况时,偶尔出现FailedtoinitializeNVML:Driver/libraryversionmismatch问题,于是将驱动切换成openkernal版本,重启后黑屏左上角光标闪烁,于是尝试使用命令......
  • RAG 工具和框架介绍: Haystack、 LangChain 和 LlamaIndex
     Haystack、LangChain和LlamaIndex,以及这些工具是如何让我们轻松地构建RAG应用程序的? 我们将重点关注以下内容:HaystackLangChainLlamaIndex增强LLM那么,为什么会有这些工具存在呢?如你所知,ChatGPT和其他LLM是在某个时间点之前的一组数据上进行训练的。更重要的是,它......
  • TVM Pass优化 -- 移除无用函数(Remove Unused Function)
    定义移除无用函数,RemoveUnusedFunction,顾名思义,就是删除Module中定义但未用到的函数当然,它也是一个模块级的优化,举例子:defget_mod():mod=tvm.IRModule({})fn1=relay.Function([],relay.const(1))fn2=relay.Function([],relay.const(2))fn3=r......
  • 04_NET中使用Redis(ServiceStack.Redis)和Linux中安装Redis
    官网:Redis-TheReal-timeDataPlatformLinux安装Redis: 1.安装gcc安装gccyum-yinstallgcctcl如果出现Complete表示成功查看gcc版本gcc-v 2.升级gcc升级到gcc9.3:yum-yinstallcentos-release-sclyum-yinstalldevtoolset-9-gccdevtoolset-9-gcc-c++......
  • 进阶 stack smashing--canary 报错利用 && environ泄露栈地址
    进阶stacksmashing--canary报错利用&&environ泄露栈地址这部分是对进阶stacksmashing的使用,以及对environ的认识,我们可以看一个buu上具体的题目题目连接https://buuoj.cn/challenges#wdb2018_guess看一下保护,pie没有开64位ida载入看一下那么在ida里面看见还是挺麻......
  • stack smashing--canary报错利用
    stacksmashing--canary报错利用一般这种都是考察点比较狭窄,因为这个漏洞在libc2.23以上就被修复了,漏洞产生的原因是因为当覆盖掉canary的时候程序会报错,程序会执行__stack_chk_fail函数来打印__libc_argv[0]指针所指向的字符串,如果把这个字符串覆盖成flag地址那么就可以得......