算法:优化“平衡括号”

2023-11-21

有人向我提出了以下问题...

给定字符串“( { [ } ] )”中的 N 个不同的左大括号和右大括号,检查该字符串是否有匹配的大括号。如果大括号匹配则返回 true,否则返回 false。

这是我想出的答案......

function braceeql(braces){
  var leftpar = 0; 
  var rightpar = 0; 
  var leftbrace = 0;
  var rightbrace = 0;
  var leftcurl = 0;
  var rightcurl = 0;

  for(var index = 0; index < braces.length; index++){
    if(braces[index] == ')'){
      leftpar += 1;
    }else if(braces[index] == '('){
      rightpar += 1;
    }else if(braces[index] == '['){
      leftbrace += 1;
    }else if(braces[index] == ']'){
      rightbrace += 1;
    }else if(braces[index] == '{'){
      leftcurl += 1;
    }else if(braces[index] == '}'){
      rightcurl += 1;
    }
  }
  if(leftcurl == rightcurl && leftbrace == rightbrace && leftpar == rightpar){
    console.log(true)
  }else{
    console.log(false)
  }
}

这确实是一段很丰富的代码,但它确实有效。我看到关于其他人如何解决这个问题的不同意见,但我想知道有没有更好/更干净的方法来解决这个算法而不影响大O?

我非常愿意接受建议和其他看待这个问题的方法。


使用堆栈

以下解决方案的时间复杂度为O(n)

function isBalanced(str) {
  const map = {
    '(': ')',
    '[': ']',
    '{': '}',
  };
  const closing = Object.values(map);
  const stack = [];
        
  for (let char of str) {
    if (map[char]) {
      stack.push(char);
    } else if (closing.includes(char) && char !== map[stack.pop()]) {
      return false;
    }
  }
  return !stack.length;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法:优化“平衡括号” 的相关文章

随机推荐

  • 使用 matplotlib 显示图像序列

    我有一个简单的 python 脚本 使用 OpenCV 从文件夹加载图像并循环显示它们 我想使用重现这种效果matplotlib import cv2 as cv import os im files for f in os listdir
  • 在tomcat中绑定JNDI数据源?

    是否可以通过编程方式将数据源绑定到 Tomcat 6 JNDI 我想动态创建一个数据源 然后通过 JNDI 使其可用 例如 ColdFusion 这就是我所拥有的 public void bindToConext DataSource da
  • “找不到 Python 可执行文件...” - npm install 挂起

    我正在使用 npm install 下载并编译我编写的小型 Node js 应用程序的所有依赖项 我正在使用的 package json 文件是正确的并且包含所有需要的信息 要安装的软件包之一具有 node gyp 作为依赖项 因此我之前安
  • Spring Boot webjars:无法通过 webjar 加载 javascript 库

    我有一个 Spring Boot 我使用 Thymeleaf 进行模板化 项目 我想在其中使用一些 jQuery 库 不幸的是 webjar 根本没有加载 我尝试了很多配置 但都失败了 这是我的 HTML 页面的代码片段
  • 如何删除 VSTS 中的共享步骤

    我正在尝试以编程方式删除共享步骤 我正在尝试导出 导入 并且正在生成大量步骤 并且希望能够删除它们 而不是手动删除 一次一个 与所有 隐藏 类别工作项类型一样 无法使用删除工作项 API 删除共享步骤 测试用例 测试计划和测试套件都有特殊的
  • 使用 Docker 驱动程序启动 Minikube 并将其绑定到主机网络

    我想知道是否可以将我的 minikube 网络绑定到我的host网络 I tried minikube start memory 10000 cpus 4 vm driver docker kubernetes version v1 19
  • LinkedIn OAuth2 授权服务器遇到意外情况

    对于一些尝试通过移动设备在 Web 视图中链接的 OAuth2 API 进行身份验证的用户 我们遇到了这个奇怪的错误 https www linkedin com uas oauth2 authorization response type
  • 尝试运行 npm install 或yarn 时出现 Zlib 错误

    我刚刚从 GitHub 上的库中提取了一些内容 我正在使用 Windows 计算机在 VSCode 中进行编码 代码没有问题 尽管当我尝试运行 npm install 或yarn install 来获取node modules 和yarn
  • 从 HTML 中过滤 JavaScript

    我有一个富文本编辑器 可以将 HTML 传递到服务器 然后该 HTML 会显示给其他用户 我想确保该 HTML 中没有 JavaScript 有什么办法可以做到这一点吗 另外 如果有帮助的话 我正在使用 ASP NET 唯一的方法是ensu
  • 将Lua嵌入到C++中

    我想编写一个可以在执行期间交互 调用 Lua 脚本的 C 程序 该程序的一个关键概念是完全的平台独立性 但我似乎无法找到真正提供这种功能的 Lua 构建 到目前为止我发现的 Lua 构建要么基于环境变量 要么基于特定的库 例如 lib dl
  • 在 PHP 的类属性中存储闭包函数

    好的 我有下面的代码 你可以看到它在这里运行http co
  • 子进程在父进程之后启动

    我有一个简单的代码来测试fork 功能 include
  • 如何使用 Java 以编程方式强制停止 Android 应用程序?

    如何使用 Java 强制停止应用程序 我正在尝试构建一个内存清理器 可以帮助清理后台进程 我知道有一种方法可以杀死应用程序的进程 但是当您进入正在运行的列表时 即使您杀死了它 该应用程序仍然存在 我尝试过很多类似的内存清理应用程序 只有其中
  • Python 3.x 的机械化

    有什么方法可以将 Mechanize 与 Python 3 x 一起使用吗 或者有什么可以在 Python 3 x 中工作的替代品吗 我已经搜索了几个小时 但没有找到任何东西 我正在寻找如何使用 Python 登录该网站的方法 但该网站使用
  • 是否可以查看Class文件的字节码? [复制]

    这个问题在这里已经有答案了 可能的重复 有没有java类文件 字节码编辑器来编辑指令 Java源代码被编译成字节码 实际上是在类文件中 是否可以查看已编译类的字节码 如果可以的话可以编辑吗 有没有可用的 eclipse 插件 是的 您可以使
  • 单个函数的两个可变参数模板?

    在 C 11 中 单个函数是否可以有两个可变参数模板 如果没有 有没有一个技巧可以写这样的东西 template
  • 使用 AVX512 生成掩模的 BMI

    我受到这个链接的启发https www sigarch org simd instructions considered harmful 了解 AVX512 的性能 我的想法是可以使用 AVX512 掩码操作删除循环后的清理循环 这是我正在
  • 使用 AspNetSqlMembershipProvider 的站点出现“SQLExpress 数据库文件自动创建错误”,但连接字符串指向 SQL Server 2005

    我有一个ASP NET v2 0网站 不是 Web 应用程序 其根目录是公共的 但 Admin 子目录需要身份验证 有关设置的所有内容都非常通用 我使用了根 web config 中定义的连接字符串和标准AspNetSqlMembershi
  • 递增 Integer 变量不会影响引用同一对象的另一个变量

    我一直理解静态变量在被引用时共享一个实例 我想对此进行测试 但结果与我的预期不同 static Integer counter 0 static Integer test counter public static void main St
  • 算法:优化“平衡括号”

    有人向我提出了以下问题 给定字符串 中的 N 个不同的左大括号和右大括号 检查该字符串是否有匹配的大括号 如果大括号匹配则返回 true 否则返回 false 这是我想出的答案 function braceeql braces var le