首页 > 其他分享 >LeetCode 20. 有效的括号

LeetCode 20. 有效的括号

时间:2023-05-14 18:01:06浏览次数:42  
标签:return len stack 括号 20 false LeetCode

题目链接:LeetCode 20. 有效的括号

题意:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

解题思路:

括号匹配是栈的经典应用场景,具体操作如下:
1. 对于所有的左括号,进栈
2. 对于所有的右括号,弹出栈顶元素,判断是否与当前元素匹配,若不匹配,则return false
3. 最后判断栈中是否还有元素,如果还有剩余元素,则说明有多余括号,不匹配

完整代码如下:


func isValid(s string) bool {
    ss:=[]rune(s)
    n:=len(ss)
    if n % 2 == 1{
        return false
    }
    var st []rune
    for i:=0;i<n;i++{
        if ss[i] == '(' || ss[i] == '{' || ss[i] == '['{
            //入栈
            st = append(st,ss[i])
        }else{
            m:=len(st)
            if m == 0{
                return false
            }
            tmp := st[m-1]
            st = st[:m-1]
            if ss[i] == '}' && tmp != '{' || ss[i] == ')' && tmp != '(' || ss[i] == ']' && tmp != '['{
                return false
            }
        }
    }
    k:=len(st)
    return k==0 
}

也可以结合map简化操作,代码如下:

func isValid(s string) bool {
    hash := map[byte]byte{')':'(', ']':'[', '}':'{'}
    stack := make([]byte, 0)
    if s == "" {
        return true
    }

    for i := 0; i < len(s); i++ {
        if s[i] == '(' || s[i] == '[' || s[i] == '{' {
            stack = append(stack, s[i])
        } else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] {
            stack = stack[:len(stack)-1]
        } else {
            return false
        }
    }
    return len(stack) == 0
}

标签:return,len,stack,括号,20,false,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17399766.html

相关文章

  • 2023.5.9
    索引分类普通索引:不加任何参数,直接通过key或index来创建的索引。是mysql中的基本索引类型,可创建在任意数据类型中。其值是否唯一、非空,则由字段本身的约束决定。唯一索引:在定义索引时,加上unique即可,该索引所在字段的值必须唯一。但允许有空值。在一张数据表里可以......
  • MEC208 控制系统
    MEC208InstrumentationandControlSystemS2,2022-2023ComputerLab(Lab2):ControlSystemCADandCASusingMATLABDr.CheeShenLIM(MEC208,Part2)Name:StudentID:Group(1or2):Date:MEC208Lab2:ControlSystemCADandCASusingMATLABPage4of14©ver2......
  • P8597 [蓝桥杯 2013 省 B] 翻硬币
    #include<bits/stdc++.h>usingnamespacestd;chara[1010],b[1010];intans;intkey=0;//置为0表示关闭计数intmain(){scanf("%s",a);scanf("%s",b);for(inti=0;a[i]!='\0';i++){if(a[i]!=b[i]&&......
  • 搜狗输入法(Windows版)快速输入直角引号「」的方法(修改配置文件,将方头括号“[”更为”「
    注意⚪以下代替方案,是将[]修改为「」,而并非修改“”。⚪修改后,在搜狗浏览器中文半角模式下,可按[,打出「」将来如需打出[],可以在搜狗浏览器的设置中,自定义短语实现:替换步骤打开:%USERPROFILE%\AppData\LocalLow\SogouPY.users\00000001\punctures.ini若该路径无此文件,请参......
  • crontab设置定时任务脚本文件每秒运行一次,每个月最后一天的21点到22点 每20分钟(1200秒
    每秒运行一次#!/bin/bashstep=2for((i=0;i<60;i=(i+step)));dophp/home/www/tp6/thinkzhangsleep$stepdoneexit0每个月最后一天的21点到22点20分钟(1200)执行一次#!/bin/bashtoday=`date+%d`hour=`date+%H`last_day=`cal|xargs|awk'{print$NF}'`if["$to......
  • 20
     #include<iostream>usingnamespacestd;intmain(){ intn,b,a; for(n=0;n<=10000;n++) { intk=0; intm=n; for(;m>0;m/=10,k++); //if(k==1)cout<<k<<endl; a=n*n; inti=0; m=n; for(i=0;i<k;i++){ intp,q; p=a%10; q=n%10; ......
  • HAOI 2015 树上操作
    有一棵点数为N的树,以点1为根,且树有点权。然后有M个操作,分为三种:操作1:把某个节点x的点权增加a。操作2:把某个节点x为根的子树中所有点的点权都增加a。操作3:询问某个节点x到根的路径中所有点的点权和。做法:树链剖分+线段树,板子题#include<cstdlib>#inc......
  • ZJOI2008 树的统计
    这是一道比树链剖分板子还板子的题目。操作:我们将以下面的形式来要求你对这棵树完成一些操作:CHANGEut:把节点\(u\)权值改为\(t\);QMAXuv:询问点\(u\)到点\(v\)路径上的节点的最大权值;QSUMuv:询问点\(u\)到点\(v\)路径上的节点的权值和。注意:从点\(u\)......
  • 2023/5/14 遇到关于mongodb部署的问题
    之前使用关于mongodb5的版本中,linux系统中tar解压mongodb文件夹后的bin目录中mongod是启动mongo服务,而里面默认自带一个连接mongodb的shell脚本mongo而这几天使用mongodb6的版本中发现mongo脚本没有了,去网上查看发现是mongodb发行了一个新的shell脚本工具mongosh,这个需要自己安装......
  • LeetCode --- 二叉树操作
    543. 二叉树的直径乍看是根节点的左子树最大高度+右子树最大高度+1但其实不能这样,因为路径可能并不经过根节点,如图二因此要用一个max来保存最后的最大路径和在求二叉树高度的递归中,在每个根节点(在递归函数中),比较max与以这个当前根节点的  左子树最大高度+右子......