js实现有效的括号--力扣
目录
1 题目
2 输入输出
3 解法 使用栈
1)使用数组存储左右括号
2)使用Map存储对应的括号
4 代码
1 题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
2 输入输出
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
3 解法 使用栈
栈后进先出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将栈顶元素出栈,如果栈顶元素与右括号匹配,继续遍历,否则是无效括号;遍历完所有括号后 stack 仍然为空=》有效,否则无效。
下面为两种代码,第一种所需空间大,时间也长
1)使用数组存储左右括号
2)使用Map存储对应的括号
左括号为键,右括号为值。(时间和空间更优)
4 代码
/*** @param {string} str* @return {boolean}* 功能:有效括号 使用栈的方法,可以使用数组存储左右括号,也可以使用多个if(switch语句),当项数多(括号多)的时候,多个if代码太长。。。*/var isValid = function(str) {/*if(str.length === 0 || str === " "){//空字符串或者长度为0时return true;}*/let stack = []; //js中一般使用数组实现栈let left = ["(", "[", "{"]; //左括号let right = [")", "]", "}"]; //右括号let len = str.length; //性能优化,不必每次循环都计算一次str.lengthfor(let i = 0; i < len; i++){//遍历字符串,如果为左括号,则入栈,否则栈顶元素出栈并与该元素比较if(left.indexOf(str[i]) !== -1){ //左括号stack.push(str[i]);}else if(right.indexOf(str[i]) !== -1){ //右括号if(stack.length === 0){ //栈为空时return false;}else { //栈长度不为空时if(left.indexOf(stack.pop()) !== right.indexOf(str[i])){ //弹出栈顶元素,若其不能与该元素配对return false;}}}}//如果为空字符串时,那么栈一直为空,不需要特意写判断为空的代码return !stack.length; //栈为空时,返回true,否则返回false};/*** @param {string} str* @return {boolean}* 功能:有效括号 使用栈的方法,结合数据结构Map*/var isValid_2 = function(str) {/*if(str.length === 0 || str === " "){//空字符串或者长度为0时return true;}*/let stack = []; //js中一般使用数组实现栈let map = new Map([ //使用map查询速度还有内存消耗比数组低["(", ")"], //键用做括号表示,对应值为对应的右括号["[", "]"],["{", "}"]]);let len = str.length; //性能优化,不必每次循环都计算一次str.lengthfor(let i = 0; i < len; i++){//遍历字符串,如果为左括号,则入栈,否则栈顶元素出栈并与该元素比较if(map.has(str[i])){ //左括号,stack.push(str[i]);}else{ //右括号if(stack.length === 0){ //栈为空时return false;}else { //栈长度不为空时if(map.get(stack.pop()) !== str[i]){ //弹出栈顶元素,若其不能与该元素配对return false;}}}}//如果为空字符串时,那么栈一直为空,不需要特意写判断为空的代码return !stack.length; //栈为空时,返回true,否则返回false};console.log(isValid_2("()"));
参考:力扣
百里于2020年5月23日
如果有错,请您指出!如有侵权,请联系我删除!
js实现有效的括号--力扣相关推荐
- 力扣学习记录(每日更新)
文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...
- [力扣刷题总结](栈和单调栈篇)
文章目录 ~~~~~~~~~~~~栈~~~~~~~~~~~~ 155. 最小栈 解法1:链表 剑指 Offer 31. 栈的压入.弹出序列 解法1:模拟栈 20. 有效的括号 解法1:栈 相似题目: ...
- 《LeetCode力扣练习》第20题 有效的括号 Java
<LeetCode力扣练习>第20题 有效的括号 Java 一.资源 题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符 ...
- 力扣算法1~10题(js)
标题 力扣算法 文章目录 标题 1.贩卖柠檬水,能否正确找零 错误 思路一: 解法一 缺点:耗时太长 解法二(大佬解法) 2.返回nums中和为target的两个数的下标 解法 3.两数相加 思路与算 ...
- 力扣P22 括号生成的DFS思路
力扣P22 括号生成的DFS思路 题干[括号生成](https://leetcode-cn.com/problems/generate-parentheses/) 思路 题干括号生成 思路 这道题用d ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
- 力扣解法汇总856. 括号的分数
目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...
- 力扣347 前 K 个高频元素 -- JS
347. 前 K 个高频元素 - 力扣(LeetCode) (leetcode-cn.com) 一:使用对象进行解题,对象的属性为给定数组的元素,属性值为给定数组元素出现的次数: 二:把对象转成数组, ...
- 力扣 (LeetCode)-对称二叉树,树|刷题打卡
Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者 [已开启]任务一:刷题打卡 * 10 篇 哪吒人生信条:如果你所学的东西 处于喜欢 ...
最新文章
- 文科生如何理解深度学习?
- 【编程】二叉树的先序、中序、后序遍历
- POJ 2195 Going Home 二分图的最大权匹配
- Eclipse c++ 中[Linker error] undefined reference to `WSAStartup@8'的解决办法
- 愚蠢的怪胎技巧:通过命令行管理SkyDrive
- iView 一周年了,同时发布了 2.0 正式版,但这只是开始...
- miui游戏驱动程序偏好设置_米粉必看:小米官方教你如何关闭 MIUI 广告 - 小米,MIUI...
- 第 39 级台阶 蓝桥杯
- Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked...
- account.php,account.php
- 什么是OGNL表达式
- qt toggled trigger clicked区别
- 你会选择逃离北上广回小城市写代码吗?
- 4人抢答器----基于Step MAX10小脚丫开发板
- python程序自动运行_定时后台运行Python程序
- [bx]和loop指令
- CHROME扩展笔记之设置代理(项目完成再上完整案例)
- 华为实习结束后,鹅厂和字节跳动递来的offer让我手足无措
- 你需要知道的无代码数据分析工具
- 怀旧服服务器维护后刷稀有怪么,这6件魔兽世界怀旧服值得刷但掉率低的装备,你刷了多少次刷到的...
热门文章
- FD.io VPP软件架构(一):vppinfra(基础结构层)
- FL2440在烧写nand flash的时候,出错[error:file size error]
- Innosetup 添加数字签名
- 联想电脑怎么连接蓝牙耳机?
- 造梦西游法宝有哪些?怎么得?
- python求三个数平均值_Python操作Excel教程-average函数求平均值
- 多媒体开发之播放器---一个基于FFmpeg、libtorrent的P2P播放器实现
- GOOGLE地球浏览器分析(一):地图服务产业分析
- java爬取网页的数据并存入数据库
- (翻译)W3C的Turtle文档