当前位置: 首页 > news >正文

Golang | Leetcode Golang题解之第301题删除无效的括号

题目:

题解:

func checkValid(str string, lmask, rmask int, left, right []int) bool {cnt := 0pos1, pos2 := 0, 0for i := range str {if pos1 < len(left) && i == left[pos1] {if lmask>>pos1&1 == 0 {cnt++}pos1++} else if pos2 < len(right) && i == right[pos2] {if rmask>>pos2&1 == 0 {cnt--if cnt < 0 {return false}}pos2++}}return cnt == 0
}func recoverStr(str string, lmask, rmask int, left, right []int) string {res := []rune{}pos1, pos2 := 0, 0for i, ch := range str {if pos1 < len(left) && i == left[pos1] {if lmask>>pos1&1 == 0 {res = append(res, ch)}pos1++} else if pos2 < len(right) && i == right[pos2] {if rmask>>pos2&1 == 0 {res = append(res, ch)}pos2++} else {res = append(res, ch)}}return string(res)
}func removeInvalidParentheses(s string) (ans []string) {var left, right []intlremove, rremove := 0, 0for i, ch := range s {if ch == '(' {left = append(left, i)lremove++} else if ch == ')' {right = append(right, i)if lremove == 0 {rremove++} else {lremove--}}}var maskArr1, maskArr2 []intfor i := 0; i < 1<<len(left); i++ {if bits.OnesCount(uint(i)) == lremove {maskArr1 = append(maskArr1, i)}}for i := 0; i < 1<<len(right); i++ {if bits.OnesCount(uint(i)) == rremove {maskArr2 = append(maskArr2, i)}}res := map[string]struct{}{}for _, mask1 := range maskArr1 {for _, mask2 := range maskArr2 {if checkValid(s, mask1, mask2, left, right) {res[recoverStr(s, mask1, mask2, left, right)] = struct{}{}}}}for str := range res {ans = append(ans, str)}return
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Can we Deploy Web Application in Azure OpenAI of Production Level
  • ElasticSearch 关于搜索,有哪些类型的搜索
  • 【C++从小白到大牛】类和对象
  • 【Boot】华硕B85 Pro Gamer 刷NVME驱动【2024年8月1日】
  • 一文看懂Java反射、注解、UML图和Lambda表达式
  • 创邻科技Galaxybase银河图数据库赋能供应链高效协同
  • [Git场景]常用工作场景演练
  • 数据库事务处理技术——故障恢复
  • mysql 数据导入与导出
  • ES(ElasticSearch)倒排索引
  • MySQL:操作符
  • 44444444444
  • 吴恩达老师机器学习-ex4
  • 架构师软考-每日两道单选题1
  • 面试经典算法150题系列-数组/字符串操作之买卖股票最佳时机
  • 【译】理解JavaScript:new 关键字
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • bootstrap创建登录注册页面
  • CSS魔法堂:Absolute Positioning就这个样
  • Java多态
  • Js基础知识(四) - js运行原理与机制
  • leetcode46 Permutation 排列组合
  • PermissionScope Swift4 兼容问题
  • QQ浏览器x5内核的兼容性问题
  • React-redux的原理以及使用
  • vue学习系列(二)vue-cli
  • Windows Containers 大冒险: 容器网络
  • 对象引论
  • 反思总结然后整装待发
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)357
  • 盘点那些不知名却常用的 Git 操作
  • 什么软件可以剪辑音乐?
  • 双管齐下,VMware的容器新战略
  • 学习JavaScript数据结构与算法 — 树
  • 异常机制详解
  • 最近的计划
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​虚拟化系列介绍(十)
  • #{}和${}的区别?
  • #QT(TCP网络编程-服务端)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (6)设计一个TimeMap
  • (python)数据结构---字典
  • (web自动化测试+python)1
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读30/100)Convolutional Pose Machines