算法10(力扣20)-有效的括号

1、问题

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

  有效字符串需满足:

            左括号必须用相同类型的右括号闭合。

            左括号必须以正确的顺序闭合。

            每个右括号都有一个对应的相同类型的左括号。

2、示例

(1)

         输入:s = "()"

        输出:true

(2)

        输入:s = "()[]{}"

        输出:true

(3)

        输入:s = "(]"

        输出:false

3、思路

        先判断是否括号数是不是偶数,然后通过循环遍历字符串中的每一项,通过switch匹对符号,是左括号都压入栈,是右括号通过匹配判断弹出的是否和遍历到的右括号匹配,不匹配返回false

4、步骤

(1)判断括号数

        

(2)设置空栈(空数组)

(3)循环遍历字符串中的各项

        1)循环内通过switch-case匹配判断,左括号都压入栈,是右括号通过匹配判断弹出的是否和遍历到的右括号匹配,不匹配返回false

        

(4)返回栈长,若为空说明匹配完闭

        

5、完整代码(这里有两个方法isValid是官方的方法,法二是这里讲述的方法)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>有效的括号</title>
</head>
<body><p>给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。<p>有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。</p></p><p>输入:s = "()"输出:true</p><p>输入:s = "()[]{}"输出:true</p><p>输入:s = "(]"输出:false</p><p>(不行)将字符串切割成数组,然后将数组的半数长度存入变量作为终止条件,然后外层循环从前往后变量,内层循环从后向前遍历以空间遇到和上一个不同的存入不同的数组,需要三个数组</p>
</body>
<script>// let str = "()"let str ='(]'isValid(str)isValid1(str)function isValid(s) {const n = s.length;// 括号数是奇数,不符合,直接返回falseif (n % 2 === 1) {return false;}// 创建右括号到左括号的映射,方便找到左括号const pairs = new Map([[')', '('],[']', '['],['}', '{']]);// console.log(pairs);// 建立空栈,方便存储和弹出const stk = [];// 遍历字符串的每一项for (let ch of s) {// console.log(ch);// 如果字符中有map中的一个右括号(可以是)或]或}),查看是否有相应的左括号进行匹配if (pairs.has(ch)) {// 如果栈为空或者栈中无左括号可以与之匹配,返回falseif (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {return false;}// 可以匹配弹出左括号stk.pop();}else {// 左括号压入栈stk.push(ch);}};// 遍历完后空栈为true,否则false// console.log(!stk.length,1111);return !stk.length;}function isValid1(s){let n = s.length// 括号数是奇数,不符合,直接返回falseif (n % 2 === 1) {return false;}// 先用循环,然后在循环中使用switch、case判断括号是否符合,左括号压入栈、右括号弹出// 空栈存储let stk = []for (let i of s) {// console.log(i); switch (i) {case '(':case '[':case '{':stk.push(i)break;  case ')':// stk.pop返回值是弹出的那一项(pop从数组最后开始弹出)// console.log(stk.pop());if (stk.pop()!=='(') return falsebreak;case ']':if (stk.pop()!=='[') return falsebreak;case '}':if (stk.pop()!=='{') return falsebreak;                                     }}// console.log(!stk.length);// 遍历完后空栈为true,否则false// console.log(!stk.length,1111);return !stk.length}
</script>
</html>

6、力扣通过代码

var isValid = function(s) {let n = s.length// 括号数是奇数,不符合,直接返回falseif (n % 2 === 1) {return false;}// 先用循环,然后在循环中使用switch、case判断括号是否符合,左括号压入栈、右括号弹出// 空栈存储let stk = []for (let i of s) {// console.log(i); switch (i) {case '(':case '[':case '{':stk.push(i)break;  case ')':// stk.pop返回值是弹出的那一项(pop从数组最后开始弹出)// console.log(stk.pop());if (stk.pop()!=='(') return falsebreak;case ']':if (stk.pop()!=='[') return falsebreak;case '}':if (stk.pop()!=='{') return falsebreak;                                     }}// console.log(!stk.length);// 遍历完后空栈为true,否则false// console.log(!stk.length,1111);return !stk.length 
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——二叉树的前序遍历和中序遍历和后序遍历

文章目录 二叉树的前序、中序与后序遍历题目描述数据范围&#xff1a;示例&#xff1a;示例 1&#xff1a; 解题思路1. 递归法2. 迭代法 代码实现&#xff08;递归法&#xff09;代码解析示例输出复杂度分析 中序遍历后序遍历 二叉树的前序、中序与后序遍历 题目描述 给定一棵…

【优选算法】8----四数之和

有看过我上篇算法博客并且去做过的铁子们&#xff0c;对这道题的话应该就不会那么陌生了&#xff0c;因为这两道题 的解题思路有着异曲同工之妙~ -----------------------------------------begin------------------------------------- 题目解析&#xff1a; 跟三数之和就多了…

【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)

本文项目编号 T 150 &#xff0c;文末自助获取源码 \color{red}{T150&#xff0c;文末自助获取源码} T150&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总

数学建模美赛倒计时&#xff0c;对于第一次参加竞赛且没有相关基础知识的同学来讲&#xff0c;掌握数学建模常用经典的模型算法知识&#xff0c;并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法&#xff0c;以及软件操作教程。 数学建模常用模型包括&#xf…

【深度学习】常见模型-循环神经网络(Recurrent Neural Network, RNN)

循环神经网络&#xff08;RNN&#xff09; 概念简介 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种用于处理序列数据&#xff08;如时间序列、文本序列等&#xff09;的神经网络模型。与传统神经网络不同&#xff0c;RNN 的结构具有记忆能力&…

Matlab总提示内存不够用,明明小于电脑内存

目录 前言情况1&#xff08;改matlab最大内存限制&#xff09;情况2&#xff08;重启电脑&#xff09;情况3 前言 在使用matlab中&#xff0c;有时候需要占用的内存并没有超过电脑内存依旧会报错&#xff0c;提示内存不够用&#xff0c;可以尝试下面几种方法&#xff0c;总有一…

数据结构(Java)——二叉树

1.概念 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常被称为左子节点和右子节点。二叉树可以是空的&#xff08;即没有节点&#xff09;&#xff0c;或者由一个根节点以及零个或多个左子树和右子树组成&#xff0c;其中左子树和右子树也分…

Windows电脑上记录工作待办清单的工具用哪个?

在Windows电脑上记录日常工作待办清单的工具用哪一个比较好呢&#xff1f;想要工作效率高&#xff0c;借助Windows电脑上的待办清单工具&#xff0c;可以帮助大家快速完成各项任务&#xff0c;今天给大家盘点几款工作待办清单工具。 Windows自带的便笺Stickynotes Windows自…

H266/VVC 量化编码中 JCCR 技术

色度联合编码 JCCR VVC 支持色度分量联合编码(Joint Coding of Chroma Residual&#xff0c;JCCR)&#xff0c; 两个色度残差联合编码。通过 TU 的标志位 tu_joint_cbcr_residual_flag 指定该工 具&#xff0c;并通过 CBF 来隐式传输所选的模式。仅当 TU 的至少一个色度分量的 …

云原生时代,如何构建高效分布式监控系统

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目&#xff0c;由于其良好的架构设计和完善的生态&#xff0c;迅速成为了监控…

DAY3,模拟终端

题目 实现一个终端的功能&#xff0c;注意需要带有cd功能 思路 如何 C语言执行shell命令&#xff1f; 使用进程替换exec函数&#xff1b;&#xff1b;使用system函数。 如何 切换工作目录&#xff1f; 使用chdir函数切换工作目录。 其…

一键视频转文字/音频转文字,浏览器右键提取B站视频文案,不限时长免费无限次可用

上篇文章阿虚分享了自己的「短视频」笔记方案 短视频文件小&#xff0c;易存储&#xff0c;所以阿虚建议是直接将原视频插入到笔记当中 而长视频文件大&#xff0c;很难像短视频一样操作。阿虚之前的建议是提取重要部分视频转长截图&#xff0c;或者视频转GIF 但上述方案仔细…

【C++】详细讲解继承(上)

C面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。现在我们就介绍一下继承。 1.继承的概念及定义 1.1 继承的概念 继承机制是⾯向对象程序设计使代码可以 复⽤ 的最重要的⼿段。我们前面接触到的都是 函数 层次的复用&#xff0c;遇到过的 类 层次的复…

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器&#xff0c;支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择&#xff1a;按住ctrl按键&#xff0c;不连续选择连续选择&#xff1a;按住shift按键&#xff0c;选择第一个&#xff0c;选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向&#xff1a;横向…

P6周:VGG-16算法-Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;Python 3.8.12 编译器&#xff1a;jupyter notebook 深度学习环境&#xff1a;torch 1.12.0cu113 一、前期准备 1.设置GPU im…

【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 14.4.1. 创建并设置crates.io账号 在发布任何 crate 之前&#xff0c;你需要在 crates.io并…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…

IBM湖仓一体与向量数据库:访问MinIO控制台(Accessing the MinIO console)

_1、从密钥中复制S3凭证并保存 &#xff08;Copy the S3 credentials from the secret and save it &#xff09; oc extract secret/ibm-lh-config-secret -n ${PROJECT_CPD_INST_OPERANDS} --to- --keysenv.properties | grep -E "LH_S3_ACCESS_KEY|LH_S3_SECRET_KEY&q…