当前位置:首页 > JavaScript

js函数实现大括号匹配

2026-04-05 01:02:22JavaScript

大括号匹配的实现方法

大括号匹配通常指检查字符串中的 {} 是否成对出现且嵌套正确。以下是几种实现方式:

使用栈数据结构

栈是解决括号匹配问题的经典方法。遍历字符串时,遇到左括号 { 入栈,遇到右括号 } 出栈,最后检查栈是否为空。

function isBalanced(str) {
  const stack = [];
  for (const char of str) {
    if (char === '{') {
      stack.push(char);
    } else if (char === '}') {
      if (stack.length === 0) return false;
      stack.pop();
    }
  }
  return stack.length === 0;
}

计数器简化版

如果不需要处理嵌套情况(如 {{}}),可以用计数器代替栈:

function isBalanced(str) {
  let count = 0;
  for (const char of str) {
    if (char === '{') count++;
    else if (char === '}') count--;
    if (count < 0) return false;
  }
  return count === 0;
}

正则表达式递归匹配

对于复杂嵌套场景,可使用正则表达式递归匹配:

function isBalanced(str) {
  const pattern = /{([^{}]*|(?R))*}/;
  return pattern.test(str);
}

处理多类型括号扩展

如需同时匹配 {}, [], () 等多种括号:

js函数实现大括号匹配

function isBalanced(str) {
  const map = { '{': '}', '[': ']', '(': ')' };
  const stack = [];
  for (const char of str) {
    if (map[char]) {
      stack.push(char);
    } else if (char === '}' || char === ']' || char === ')') {
      if (map[stack.pop()] !== char) return false;
    }
  }
  return stack.length === 0;
}

注意事项

  • 空字符串应返回 true
  • 非括号字符应被忽略
  • 右括号出现在左括号前时立即返回 false
  • 时间复杂度一般为 O(n),空间复杂度为 O(n)(栈实现)或 O(1)(计数器)

标签: 括号函数
分享给朋友:

相关文章

vue防抖函数实现

vue防抖函数实现

防抖函数原理 防抖(Debounce)是一种限制函数频繁调用的技术,在事件被触发后延迟执行,若在延迟时间内再次触发,则重新计时。适用于输入框搜索、窗口大小调整等场景。 Vue 中实现防抖的三种方式…

vue组件实现函数调用

vue组件实现函数调用

实现 Vue 组件函数调用的方法 在 Vue 组件中实现函数调用可以通过多种方式完成,以下是常见的几种方法: 通过 methods 定义并调用函数 在 Vue 组件的 methods 选项中定义函…

react如何调用函数

react如何调用函数

React 函数调用的方法 在 React 中调用函数可以通过多种方式实现,具体取决于函数的作用和调用时机。以下是常见的几种方法: 直接在组件中调用函数 函数可以在组件的 render 方法或其他…

react项目如何定义全局函数

react项目如何定义全局函数

定义全局函数的方法 在React项目中,可以通过以下几种方式定义全局函数,以便在整个应用中复用。 使用全局变量挂载 将函数挂载到window对象上,使其成为全局可访问的函数。这种方式简单直接,但可能…

react如何绑定事件处理函数

react如何绑定事件处理函数

在 React 中绑定事件处理函数的方法 React 提供了多种方式来绑定事件处理函数,以下是常见的几种方法: 使用箭头函数自动绑定 this 在类组件中,可以使用箭头函数来定义方法,这样可以避免…

react闭包实现函数

react闭包实现函数

在 React 中实现闭包函数 闭包在 React 中常用于保存函数作用域内的变量状态,尤其在处理异步操作或事件回调时。以下是几种常见的实现方式: 使用 useCallback 缓存函数 useCa…