目录

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. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

  2. [力扣刷题总结](栈和单调栈篇)

    文章目录 ~~~~~~~~~~~~栈~~~~~~~~~~~~ 155. 最小栈 解法1:链表 剑指 Offer 31. 栈的压入.弹出序列 解法1:模拟栈 20. 有效的括号 解法1:栈 相似题目: ...

  3. 《LeetCode力扣练习》第20题 有效的括号 Java

    <LeetCode力扣练习>第20题 有效的括号 Java 一.资源 题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符 ...

  4. 力扣算法1~10题(js)

    标题 力扣算法 文章目录 标题 1.贩卖柠檬水,能否正确找零 错误 思路一: 解法一 缺点:耗时太长 解法二(大佬解法) 2.返回nums中和为target的两个数的下标 解法 3.两数相加 思路与算 ...

  5. 力扣P22 括号生成的DFS思路

    力扣P22 括号生成的DFS思路 题干[括号生成](https://leetcode-cn.com/problems/generate-parentheses/) 思路 题干括号生成 思路 这道题用d ...

  6. 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...

  7. ​力扣解法汇总856. 括号的分数

    目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...

  8. 力扣347 前 K 个高频元素 -- JS

    347. 前 K 个高频元素 - 力扣(LeetCode) (leetcode-cn.com) 一:使用对象进行解题,对象的属性为给定数组的元素,属性值为给定数组元素出现的次数: 二:把对象转成数组, ...

  9. 力扣 (LeetCode)-对称二叉树,树|刷题打卡

    Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者 [已开启]任务一:刷题打卡 * 10 篇 哪吒人生信条:如果你所学的东西 处于喜欢 ...

最新文章

  1. 文科生如何理解深度学习?
  2. 【编程】二叉树的先序、中序、后序遍历
  3. POJ 2195 Going Home 二分图的最大权匹配
  4. Eclipse c++ 中[Linker error] undefined reference to `WSAStartup@8'的解决办法
  5. 愚蠢的怪胎技巧:通过命令行管理SkyDrive
  6. iView 一周年了,同时发布了 2.0 正式版,但这只是开始...
  7. miui游戏驱动程序偏好设置_米粉必看:小米官方教你如何关闭 MIUI 广告 - 小米,MIUI...
  8. 第 39 级台阶 蓝桥杯
  9. Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked...
  10. account.php,account.php
  11. 什么是OGNL表达式
  12. qt toggled trigger clicked区别
  13. 你会选择逃离北上广回小城市写代码吗?
  14. 4人抢答器----基于Step MAX10小脚丫开发板
  15. python程序自动运行_定时后台运行Python程序
  16. [bx]和loop指令
  17. CHROME扩展笔记之设置代理(项目完成再上完整案例)
  18. 华为实习结束后,鹅厂和字节跳动递来的offer让我手足无措
  19. 你需要知道的无代码数据分析工具
  20. 怀旧服服务器维护后刷稀有怪么,这6件魔兽世界怀旧服值得刷但掉率低的装备,你刷了多少次刷到的...

热门文章

  1. FD.io VPP软件架构(一):vppinfra(基础结构层)
  2. FL2440在烧写nand flash的时候,出错[error:file size error]
  3. Innosetup 添加数字签名
  4. 联想电脑怎么连接蓝牙耳机?
  5. 造梦西游法宝有哪些?怎么得?
  6. python求三个数平均值_Python操作Excel教程-average函数求平均值
  7. 多媒体开发之播放器---一个基于FFmpeg、libtorrent的P2P播放器实现
  8. GOOGLE地球浏览器分析(一):地图服务产业分析
  9. java爬取网页的数据并存入数据库
  10. (翻译)W3C的Turtle文档