LeetCode-括号匹配

2023-05-16

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

 

 

总结:

题目不难,第一反应就是用栈(哈希表,列表等)存储左括号,然后进行右括号匹配,匹配成功返回true,效率一般,空间耗费大,这里主要是记录一些思路奇特,效率很高的解法。

1.作者wings

思路:摒弃一个一个匹配的想法,直接循环遍历整个字符串,只要存在一对完整的括号,就删掉,如果字符串输入是合法的,那么每次都会去掉一对括号,最终字符串会变成空串,主要学习思路,时间空间复杂度较低。

 

class Solution:
    def isValid(self, s):
        while '{}' in s or '()' in s or '[]' in s:
            s = s.replace('{}', '')
            s = s.replace('[]', '')
            s = s.replace('()', '')
        return s == ''

执行用时 :52 ms, 在所有 python 提交中击败了16.46%的用户

内存消耗 :11.9 MB, 在所有 python 提交中击败了16.00%的用户

 

2.作者:并不傻的袍子

这个解法当时也想到了,但是记不到括号之间的ASCII码关系,我又不能上网查,想当然以为它们应该相邻所以差值为1,结果做错了,于是没有实现,现在发现()差1,[],{}是差2....我服了。该作者的代码时间耗时击败了100%,我用java写的83%,果然算法还是c的天地。其中有一点,程序中只分配了 n/2 个存储空间,但最好还是多分配1个存储空间,在极端情况可能会越界,发生错误。

ASCII中,

bool isValid(char* s) {

int length=0;//定义字符串长度
while(*(s+length))
length++;//获取字符串长度
char* ptr=(char*)malloc(length/2);//分配内存空间
memset(ptr,0,length/2);//初始化内存空间
int i,a=0;
for(i=0;i<length;i++)
{
    if((*(s+i)=='(')||(*(s+i)=='{')||(*(s+i)=='['))
    {
        a++;
        *(ptr+a)=*(s+i);
    }
    //'('与')'的ASCII值差1,'['与']','{'与'}'的ASCII值差2
    else if((*(s+i)==(*(ptr+a)+1))||(*(s+i)==(*(ptr+a)+2)))
    {
        a--;
    }
    else return 0;
}
if(a)
    return 0;
return 1;

}

 3.作者:chaves

效率拉满,几乎双百。用字典的key和value分别存储左右括号,遍历字符串,如果和当前字符不匹配把它加入列表,如果和列表当前元素匹配则列表元素出栈,最终如果列表为空,即全部匹配成功,则返回true。

class Solution:
    def isValid(self, s: str) -> bool:
        d = {")": "(", "]":"[", "}": "{"}
        l = []
        for i in s:
            if d.get(i) is None:
                l.append(i)
            elif len(l) == 0 or d.get(i) != l[-1]:
                return False
            elif d.get(i) == l[-1]:
                l.pop()
        if len(l) == 0:
            return True
        else:
            return False

 

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

LeetCode-括号匹配 的相关文章

随机推荐

  • rplidar的安装与使用

    rplidar的安装与使用 1 rplidar的安装2 RPLIDAR驱动下载3 将RPLIDAR连接好后 xff0c 检测串口是否连接成功4 编译工作空间并设置环境变量5 检查RPLIDAR A2的串行端口的权限并添加写权限 xff08
  • ros知识点1-1:节点发布话题,并设置发布频率

    1 创建节点发布话题 include ros ros h 针对ros中文本内容需要添加的头文件 include std msgs String h 发布方实现 int main int argc char argv ros init arg
  • CmakeLists.txt编写流程梳理

    目录 背景 xff1a 1 设置最低版本 xff1a 2 设置名称 版本号 xff1a 3 设置c c 43 43 支持版本4 设置编译器参数5 目标文件输出目录6 判断平台 xff0c 定义平台宏7 设置第三方头文件和设置链接库寻找路径8
  • Spring consider using ‘getBeanNamesOfType‘ with the ‘allowEagerInit‘ flag turned off, for example.

    看下spring说的类 xff0c 两个类之间发生循环引用了 xff0c 请在一方的注入属性上添加 64 Lazy注解 避免循环引用
  • 本地访问阿里云上部署的项目

    本地访问阿里云上部署的项目 1 确保本地能用ping命令连接阿里云服务器 命令 win 43 r 输入cmd ping 43 阿里云共网 ip 2 在阿里云官网上的安全组里进行相关配置 3 选择配置规则 xff0c 进行配置 4 重新在Xs
  • 在jeston nano开发板之中安装ros系统

    这段时间由于工作的需要 xff0c 要在jeston nano之中安装ros系统 jeston nano之中对应的系统是ubuntu18 04所对应的ros系统版本为ROS Melodic 在安装的过程之中遇见了很多的坑 xff0c 特此记
  • make的相关命令详解和区别

    makefile定义了一系列的规则来指定 xff0c 哪些文件需要先编译 xff0c 哪些文件需要后编译 xff0c 哪些文件需要重新编译 xff0c 甚至于进行更复杂的功能操作 xff0c 因为 makefile就像一个Shell脚本一样
  • TX2板 (ubuntu18.04系统)使用记录

    TX2板 ubuntu18 04系统 xff09 使用记录 一 TX2板 ubuntu18 04系统 xff09 更换国内软件源1 备份原软件源2 修改sources list文件3 更新 二 TX2板 ubuntu18 04系统 xff0
  • 海康威视相机标定、畸变矫正及AprilTag获取视觉标签三维信息

    海康威视相机标定 畸变矫正及AprilTag获取视觉标签三维信息 一 海康威视相机标定二 相机去畸变三 Apritag ros获得视觉标签的三维位置 一 海康威视相机标定 相机标定经调研共发现三种常用方式 xff1a 利用Matlab的ca
  • 如何切换Echarts主题

    一 打开Echarts官方文档 点击资源 gt 主题构建工具 进入到主题选择页面 二 选择默认主题 点击默认方案选择合适的主题 例如选择macarons xff0c 点击后右侧展示对应主题效果 三 应用主题 1 下载主题 点击下载主题 xf
  • C中strchr()函数用法

    strchr 函数包含于头文件 xff1a include lt stdio h gt 中 xff1b 函数原型为 xff1a char strchr char str char int c 函数功能为 xff1a 在字符串str中寻找字符
  • 切身经历,经理都慌了!云服务器连接成功蓝屏,桌面没有任何图标显示

    恢复了服务器数据 xff0c 结果服务器桌面任何东西都看不到了 xff0c 只有一个蓝色背景 xff0c 那一刻 xff0c 我心里是慌的 解决方案 xff1a 1 使用远程桌面 xff0c 输入您服务器IP地址登陆服务器 2 一个用户黑屏
  • KMP算法的理解

    串的模式匹配算法主要有两种 xff0c 一是简单模式匹配 xff0c 而是KMP算法 简单模式匹配算法很容易理解 xff0c 每一次从主串的第一个位置起和模式串的第一个字符开始比较 xff0c 如果相等就按照顺序一直比下去 xff0c 如果
  • 普利姆算法和克鲁斯卡尔算法求解最小生成树

    Q xff1a 最小生成树有什么用 xff1f A xff1a 譬如我要去五个城市旅游 xff0c 每两个城市之间可能有路也可能没有 xff0c 路的距离可能一样也可能不一样 xff0c 随机从一个城市出发 xff0c 我想要把每个城市走一
  • ES多个字段group by操作

    以下操作基于es6 8 第一种方式 这种方式查询出来的数据不是扁平化的 xff0c 而是一层套一层的 xff0c 比如字段一套字段二 GET 索引name 索引type search 34 size 34 0 34 aggregations
  • 整数反转

    给出一个 32 位的有符号整数 xff0c 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的
  • python批量爬取图片

    import requests import time import re 请求网页 header防止被禁止访问403 xff0c 伪装成浏览器 xff0c 不会被认为是python headers 61 39 User Agent 39
  • LeetCode罗马数字转整数

    罗马数字包含以下七种字符 I xff0c V xff0c X xff0c L xff0c C xff0c D 和 M 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 xff0c 罗马数字 2 写做
  • STM32F407-跑马灯

    硬件准备 xff08 STM32F407ZGT6 xff09 1 初始准备 1 1打开Template模板 xff0c 在工程目录下新建HARDWARE文件夹 1 2 新建在HARDWARE路径中新建led c led h两个文件 xff0
  • LeetCode-括号匹配

    给定一个只包括 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 xff0c 39 39 的字符串 xff0c 判断字符串是否有效 有效字符串需满足 xff1a 左括号必须用相同类型