IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构和算法之堆栈应用:使用堆栈检查括号是否平衡 -> 正文阅读

[数据结构与算法]数据结构和算法之堆栈应用:使用堆栈检查括号是否平衡

数据结构和算法之堆栈应用:使用堆栈检查括号是否平衡

下面展示为栈 Stack

// 栈的定义: 先进后出 
class Stack {
  // 构造函数 dddd
  constructor(){
      this.arr = [];
  }
  push(element){ // 入栈
      this.arr.push(element);
  }
  pop() { // 出栈
      return this.arr.pop();
  }
  isEmpty(){ //是否为空
    if(this.arr.length < 1) return true
    else return false
  }
}

下面展示实现代码 codes

function checkStr(str){
  // 获取 栈的实例
  let myStack = new Stack()
  //Iterate through the string str
  // 遍历str判断
  for (const item of str) {
    //For every closing parenthesis check for its opening parenthesis in stack
    //因括号为成双成对的 故对于每个右括号,检查堆栈中的左括号
    if([')',']','}'].includes(item)){
	  // If there is no data in the stack, it is an error. For example,
	  // the first input is a right parenthesis
      // 如果栈里没有数据则为错误 例如:第一个输入的为右括号
      if(myStack.isEmpty()) return false      
      // Out of stack and get out of stack characters
      // 出栈且获取到出栈字符
      let output = myStack.pop()
      //If you can't find the opening parentheses for any closing one then returns false.
      // 如果找不到任何右括号的左括号,则返回
      // Note: output hundred percent be left parenthesis and item hundred percent 
      // be right parenthesis
      // 注:output必然为左括号,item必然为右括号
      // Array ['{}', '[]', '()'] and Array [')',']','}'] are three cases
      // ['{}','[]','()']为三种情况 同上 [')',']','}']
      if(!['{}','[]','()'].includes(output + item)) return false        
    }else{
      // Otherwise, it is added to the stack
      // 否则就添加进栈
      myStack.push(item)
    }
  }
  // If str in stack then also return false.
  // Because every left and right bracket is corresponding and should be eliminated
  // 字符在堆栈中,然后也返回false。 因为每一个左右括号都是对应的且应当合法消除的
  if(!myStack.isEmpty) return false
  // At the end return true if you haven't encountered any of the above false conditions.
  // return true
  // 如果没有遇到上述任何错误条件,则在结束时返回true。
  return true
}

// 1、将str解构放进数组,便以使用forof
// 2、直接使用for循环
// ps:我这里使用的方法 1
var ssr= "{[()]}"
console.log(ssr)
console.log(checkStr([...ssr]))

ssr = "{[([({))]}}"
console.log(ssr)
console.log(checkStr([...ssr]))

ssr = "{{]{}()()()}"
console.log(ssr)
console.log(checkStr([...ssr]))

ssr = "{{(){}({[]})[]}}"
console.log(ssr)
console.log(checkStr([...ssr]))

/*
以下为输出结果
{[()]}
true
{[([({))]}}
false
{{]{}()()()}
false
{{(){}({[]})[]}}
true
*/

我比较懒 就写这么多 如有帮助,点个赞呗 😄 It’s my pleasure !THX!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 16:14:34  更:2021-12-18 16:15:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:35:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码