当前位置:首页 > JavaScript

js函数实现大括号匹配

2026-04-05 01:02:22JavaScript

大括号匹配的实现方法

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

使用栈数据结构

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

js函数实现大括号匹配

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;
}

计数器简化版

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

js函数实现大括号匹配

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);
}

处理多类型括号扩展

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

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伪函数实现

Vue 伪函数实现方法 在 Vue 中,伪函数(Mock Functions)通常用于测试或模拟某些逻辑行为。以下是几种常见的实现方式: 使用 Jest 的 mock 功能 // 模拟一个 API…

vue组件实现函数调用

vue组件实现函数调用

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

react如何刷新函数组件

react如何刷新函数组件

刷新函数组件的方法 在React中,函数组件的刷新通常通过状态更新或外部触发来实现。以下是几种常见的方法: 使用useState触发重新渲染 通过更新状态变量强制组件重新渲染。React会在状态变化…

react如何绑定事件处理函数

react如何绑定事件处理函数

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

react如何阻止函数组件更新

react如何阻止函数组件更新

阻止函数组件更新的方法 在React中,函数组件的更新通常由状态(state)或属性(props)的变化触发。以下是几种阻止函数组件不必要更新的方法: 使用React.memo进行浅比较 React…

react如何让函数组件缓存

react如何让函数组件缓存

缓存函数组件的常用方法 在React中,函数组件本身是无状态的,但可以通过以下方式实现类似类组件的缓存或优化效果: 使用React.memo进行浅比较缓存 React.memo是一个高阶组件,它会记…