1. 题目

给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效

从形式上讲,只有满足下面几点之一,括号字符串才是有效的:

  • 它是一个空字符串,或者
  • 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串。

给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数

示例 1:
输入:"())"
输出:1示例 2:
输入:"((("
输出:3示例 3:
输入:"()"
输出:0示例 4:
输入:"()))(("
输出:4提示:
S.length <= 1000
S 只包含 '(' 和 ')' 字符。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-add-to-make-parentheses-valid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 5470. 平衡括号字符串的最少插入次数 medium

  • 用栈来匹配,未匹配的在栈内留下来
class Solution {public:int minAddToMakeValid(string S) {stack<char> stk;for(int i = 0; i < S.size(); ++i){if(stk.empty())stk.push(S[i]);else{if(stk.top()=='(' && S[i]==')')stk.pop();elsestk.push(S[i]);}}return stk.size();//未匹配的字符数}
};

or
用左右括号计数来表示

class Solution {public:int minAddToMakeValid(string S) {int left = 0;int right = 0;for(char &c:S){if(c=='(') left++;else{if(left>0) //右括号可以与之匹配left--;else //右括号没有相应的左括号匹配right++;}   }return left+right;}
};

LeetCode 921. 使括号有效的最少添加(栈)相关推荐

  1. [LeedCode]921. 使括号有效的最少添加

    题目描述: 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效.从形式上讲,只有满足下面几点之一,括号字符 ...

  2. 使括号有效的最少添加

    使括号有效的最少添加 给定一个由(和)括号组成的字符串S,我们需要添加最少的括号(或是),可以在任何位置,以使得到的括号字符串有效. 从形式上讲,只有满足下面几点之一,括号字符串才是有效的: 它是一个 ...

  3. [Swift]LeetCode921.使括号有效的最少添加 | Minimum Add to Make Parentheses Valid

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. 2022-3-25 Leetcode 921.使括号有效

    第一版,我还是 too young,too naive class Solution {public:int minAddToMakeValid(string s) {int deep = 0;for ...

  5. LeetCode 1674. 使数组互补的最少操作次数(差分思想)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...

  6. LeetCode 1653. 使字符串平衡的最少删除次数(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,它仅包含字符 'a' 和 'b'​​​​ . 你可以删除 s 中任意数目的字符,使得 s 平衡 . 我们称 s 平衡的 当不存在下标 ...

  7. LeetCode 1568. 使陆地分离的最少天数(DFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地. 岛屿由水平方向或竖直方向上相邻的 1 (陆地)连接形成. 如 ...

  8. LeetCode——1888. 使二进制字符串字符交替的最少反转次数(Minimum Number of Flips to Make the Binary ...)[中等]——分析及代码(Java)

    LeetCode--1888. 使二进制字符串字符交替的最少反转次数[Minimum Number of Flips to Make the Binary String Alternating][中等 ...

  9. LeetCode Algorithm 22. 括号生成

    22. 括号生成 Ideas 这是一道动态规划的题目,关于动态规划的题目我们可以从n比较小的情况下开始逐步分析. 当n=1时,["()"] 当n=2时,["()()&qu ...

最新文章

  1. 关于MySql中自增长id设置初始值
  2. 常用批处理命令总结之Find和FindStr
  3. ES5-6 作用域、作用域链、预编译、闭包基础
  4. React开发(175):注意在回调里面重新渲染列表
  5. java 大数四则运算_大数四则运算java(转)
  6. QSS按钮样式设置的坑,按下(pressed)时按钮颜色不变化
  7. 来自TMDB的5000部电影数据集
  8. MSXML应用总结 开发篇(上)
  9. linux出现bash什么意思,linux中bash是什么
  10. Moya 设置超时时间和请求头
  11. 机器学习习题(17)
  12. Dell服务器如何做raid
  13. 消息队列之取消会议和自动退款处理
  14. oracle事务之oracle读一致性
  15. alt tab无法切换窗口
  16. IDEA alt+ins快捷键失效问题解决方法
  17. Arduino空气污染温湿度MQ135烟雾检测报警ESP8266 手机App socket
  18. sql 批量更新时间字段加小时
  19. ubuntu20.04 vscode使用ROS(C++)
  20. 演艺界的二十位经典艺人[组图]

热门文章

  1. excel统计行数_值得收藏的6个Excel函数公式(有讲解)
  2. struct cdev结构体和cdev_init和cdev_add函数
  3. Qt 串口类QSerialPort 使用笔记
  4. 家用台式计算机的额定功率,台式机的功率(台式电脑电源功率多大才合适?)...
  5. 原码、反码、补码,以及负数的位操作
  6. MySQL源码编译与初始化
  7. [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件
  8. bzoj2435: [Noi2011]道路修建 树上dp
  9. ApplicationContext容器的设计原理
  10. SubSonic中的字段付值--MakeOld Update