问题描述

  1. 给你一个括号字符串 s ,它只包含字符 '('  ')' 。一个括号字符串被称为平衡的当它满足:
  2. 任何左括号 '(' 必须对应两个连续的右括号 '))' 
  3. 左括号 '(' 必须在对应的连续两个右括号 '))' 之前。
  4. 比方说 "())" "())(())))"  "(())())))" 都是平衡的, ")()" "()))"  "(()))" 都是不平衡的。
  5. 你可以在任意位置插入字符 '(' ')' 使字符串平衡。
  6. 请你返回让平衡的最少插入次数。
  7.  
  8. 示例 1
  9. 输入:s = "(()))"
  10. 输出:1
  11. 解释:第二个左括号有与之匹配的两个右括号,但是第一个左括号只有一个右括号。我们需要在字符串结尾额外增加一个 ')' 使字符串变成平衡字符串 "(())))"
  12. 示例 2
  13. 输入:s = "())"
  14. 输出:0
  15. 解释:字符串已经平衡了。
  16. 示例 3
  17. 输入:s = "))())("
  18. 输出:3
  19. 解释:添加 '(' 去匹配最开头的 '))' ,然后添加 '))' 去匹配最后一个 '('
  20. 示例 4
  21. 输入:s = "(((((("
  22. 输出:12
  23. 解释:添加 12 ')' 得到平衡字符串。
  24. 示例 5
  25. 输入:s = ")))))))"
  26. 输出:5
  27. 解释:在字符串开头添加 4 '(' 并在结尾添加 1 ')' ,字符串变成平衡字符串 "(((())))))))"

代码

  1. class Solution {
  2. public:
  3. int minInsertions(string s) {
  4. //ans用于记录需要左括号和右括号的个数
  5. //need记录需要的右括号的个数
  6. int ans = 0,need = 0;
  7. for(char& c:s)
  8. {
  9. if(c == '(')
  10. {
  11. //一个左括号对应两个右括号
  12. need += 2;
  13. if(need % 2 == 1)
  14. {
  15. ++ans;//加上一个右括号
  16. --need;//右括号的需求减一
  17. }
  18. }
  19. else{
  20. --need;
  21. if(need == -1)
  22. {
  23. //右括号多了一个,需要一个左括号
  24. ++ans;
  25. need = 1;//因为遇到一个右括号,所以只缺少一个右括号
  26. }
  27. }
  28. }
  29. return need + ans;
  30. }
  31. };

结果

  1. 执行用时:120 ms, 在所有 C++ 提交中击败了23.28%的用户
  2. 内存消耗:11.9 MB, 在所有 C++ 提交中击败了99.72%的用户

leetcode 1541. 平衡括号字符串的最少插入次数的更多相关文章

  1. LeetCode 921. 使括号有效的最少添加(Minimum Add to Make Parentheses Valid) 48

    921. 使括号有效的最少添加 921. Minimum Add to Make Parentheses Valid 题目描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的 ...

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

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

  3. leetcode 921. 使括号有效的最少添加(Python)

    class Solution: def minAddToMakeValid(self, S): """ :type S: str :rtype: int "&q ...

  4. [LeetCode] 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加

    Given a string S of '(' and ')' parentheses, we add the minimum number of parentheses ( '(' or ')', ...

  5. [LeetCode] Valid Parenthesis String 验证括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  6. [leetcode]678. Valid Parenthesis String验证有效括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  7. [LeetCode]678. 有效的括号字符串、20. 有效的括号(栈)

    题目 678. 有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何 ...

  8. Leetcode 678.有效的括号字符串

    有效的括号字符串 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须 ...

  9. leetcode - 括号字符串是否有效

    括号字符串是否有效 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. ...

随机推荐

  1. Python变量的作用域在编译过程中确定

    为了节省读友的时间,先上结论(对于过程和细节感兴趣的读友可以继续往下阅读,一探究竟): [结论] 1)Python并不是传统意义上的逐行解释型的脚本语言 2)Python变量的作用域在编译过程就已经确 ...

  2. CF205A Little Elephant and Rozdil 题解

    Content 有一头小象住在 \(\texttt{Rozdil}\) 小镇里,它想去其他的小镇旅行. 这个国家一共有 \(n\) 个小镇,第 \(i\) 个小镇距离 \(\texttt{Rozdil ...

  3. CF1130A Be Positive 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试找出一个数 \(d\),使得数组中的每个数除以 \(d\) 得到的 \(n\) 个结果中至少有 \( ...

  4. ApacheShiro反序列化远程代码执行 漏洞处理

    Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookierememberMe字段内容分别进行序列化.AES加密.Base6 ...

  5. 【LeetCode】1419. 数青蛙 Minimum Number of Frogs Croaking (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  6. 【LeetCode】362. Design Hit Counter 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  7. 【LeetCode】1134. Armstrong Number 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 直接计算 日期 题目地址:https://leetco ...

  8. 【LeetCode】722. Remove Comments 解题报告(Python)

    [LeetCode]722. Remove Comments 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/remove-c ...

  9. 【LeetCode】816. Ambiguous Coordinates 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/ambiguous ...

  10. Cookie、Session、Token、JWT

    什么是认证(Authentication)------->就是验证当前用户的身份,证明"你是你自己" 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只 ...