首页 > 其他分享 >写一个方法判断大括号{}是否闭合

写一个方法判断大括号{}是否闭合

时间:2024-11-30 09:45:58浏览次数:4  
标签:判断 console log brackets 闭合 isBracketsBalanced bracket stack 大括号

function isBracketsBalanced(str) {
  const stack = [];
  const openBracket = '{';
  const closeBracket = '}';

  for (let i = 0; i < str.length; i++) {
    const char = str[i];

    if (char === openBracket) {
      stack.push(char);
    } else if (char === closeBracket) {
      if (stack.length === 0) {
        return false; // Unmatched closing bracket
      }
      stack.pop();
    }
  }

  return stack.length === 0; // True if all brackets are matched
}


// Example usage:
console.log(isBracketsBalanced("{abc}")); // true
console.log(isBracketsBalanced("{abc{def}}")); // true
console.log(isBracketsBalanced("{{abc}")); // false
console.log(isBracketsBalanced("{abc}}")); // false
console.log(isBracketsBalanced("{abc}def{ghi}")); // true
console.log(isBracketsBalanced("}abc{")); // false
console.log(isBracketsBalanced("")); // true - Empty string is considered balanced
console.log(isBracketsBalanced("abc")); // true - No brackets are also considered balanced



// More robust version handling other bracket types ((), [], {})
function isAllBracketsBalanced(str) {
  const stack = [];
  const brackets = {
    '(': ')',
    '[': ']',
    '{': '}',
  };

  for (let char of str) {
    if (brackets[char]) {
      // If it's an opening bracket, push it onto the stack
      stack.push(char);
    } else {
      // If it's a closing bracket
      const lastOpened = stack.pop(); 
      if (!lastOpened || brackets[lastOpened] !== char) {
        // If the stack is empty or the closing bracket doesn't match the last opened one
        return false;
      }
    }
  }

  // If the stack is empty at the end, all brackets are balanced
  return stack.length === 0;
}

console.log("---- All bracket types ----");
console.log(isAllBracketsBalanced("(){}[]")); // true
console.log(isAllBracketsBalanced("([{foo}])")); // true
console.log(isAllBracketsBalanced("{[}]")); // false
console.log(isAllBracketsBalanced("[(])")); // false

This code uses a stack data structure to keep track of opening brackets. When a closing bracket is encountered, it's checked against the top of the stack. If they match, the opening bracket is popped off the stack. If they don't match or the stack is empty when a closing bracket is found, the brackets are unbalanced. If the stack is empty at the end of the string, all brackets are balanced.

The second, more robust function, isAllBracketsBalanced, handles parentheses (), square brackets [], and curly braces {} using a lookup table (brackets) for efficient matching. This is generally more useful in real-world scenarios.

标签:判断,console,log,brackets,闭合,isBracketsBalanced,bracket,stack,大括号
From: https://www.cnblogs.com/ai888/p/18578055

相关文章

  • #Js篇: 链式判断运算符 ?.和Null判断运算符 ??和逻辑赋值运算符||= &&= ??=
    链式判断运算符?.?.运算符,直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不再往下运算,而是返回undefined。链判断运算符?.有三种写法。obj?.prop//对象属性是否存在obj?.[expr]//同上func?.(…args)//函数或对象方法是否存在下面是obj?......
  • 判断某个区间的水仙数
    “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。假设我们要求1~100000之间的水仙数,根据水仙数的定义,我们首先要判断这个数字是几位数,然后再取每个位数上的数字,依次乘方相加。所以大致步骤如下①判断该数字是几位......
  • 判断正则二叉树———概念 + 实现模板 + 例题详解(简单易懂)
    判断正则二叉树递归判断概念正则二叉树(RegularBinaryTree):但每个节点要么有两个子节点,要么是叶子节点。实现思路1.设置递归终止条件(1)空节点(node==nullptr)————>returntrue;(2)只有一个子树(!root->left&&root->rig......
  • Java 使用魔数判断文件类型
    引言在日常的开发工作中,一般是使用文案后缀去判断文件类型,这种不是很严谨,那么这样可通过修改文件名的方式去修改文件类型,如果将一个危险文件修成成png或者txt上传到文件服务器,后果难以估量。那么可以使用文件头魔数的方式去判断文件类型,这是一种比较安全的方式。魔数介绍(Magic......
  • c++判断字符串全是字母或数字
    使用std::all_of判断字符串是否全为字母、数字或字母数字#include<iostream>#include<string>#include<algorithm>#include<cctype>//用于isdigit,isalpha等函数//std::islower(ch);//判断字符是否是小写字母//std::isupper(ch);//判断字符是否是大写字母......
  • 第 217 期 判断 Shopify 店铺 检测主题和插件的方法 竞对网站分析
    提示:本文转自Shopify万能钥匙的教程博客如何查看Shopify竞争对手店铺是用什么平台建站的?在Shopify网站运营过程中,进行竞对分析时经常会需要判断对方的网站是不是通过Shopify搭建的,以及如果是的话,查看它用的主题是哪一款,或者某项功能用的是哪款App实现的,本期内容将分......
  • 写一个方法判断页面滚动方向
    functiongetScrollDirection(){letpreviousScrollY=window.pageYOffset;letscrollingUp=false;window.addEventListener('scroll',function(){constcurrentScrollY=window.pageYOffset;scrollingUp=previousScrollY>curren......
  • 数组-回文字符的判断
    #include<stdio.h>#include<string.h>intmain(){charstr[21];//声明一个字符数组,用于存储输入的字符串,长度为20加上一个结束符'\0'inti,k;//声明两个整型变量,用于索引和比较字符串//读取用户输入的字符,直到遇到换行符或数组长度达到20i=0;......
  • shell(6)if条件判断与for循环结构
     声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页泷羽sec......
  • Day49 | 动态规划 :线性DP 判断子序列&&两个字符串的删除操作
    Day49|动态规划:线性DP判断子序列&&两个字符串的删除操作动态规划应该如何学习?-CSDN博客动态规划学习:1.思考回溯法(深度优先遍历)怎么写注意要画树形结构图2.转成记忆化搜索看哪些地方是重复计算的,怎么用记忆化搜索给顶替掉这些重复计算3.把记忆化搜索翻译成动态规......