Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 921. 使括号有效的最少添加(栈)

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

作者头像
Michael阿明
发布于 2020-07-13 03:29:25
发布于 2020-07-13 03:29:25
52900
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 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. 解题

  • 用栈来匹配,未匹配的在栈内留下来
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
        		else
        			stk.push(S[i]);
        	}
        }
        return stk.size();//未匹配的字符数
    }
};

or 用左右括号计数来表示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 20. 有效的括号(栈)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
Michael阿明
2021/02/20
2540
LeetCode 20. 有效的括号(栈)
有效的括号(leetcode 20)
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
恋喵大鲤鱼
2022/09/27
2620
典型的括号匹配问题c++
然后遍历字符串中的每个字符,在遍历过程中,如果是左括号,则将其加入栈中,如果是右括号,则弹出栈顶元素进行比较,如果不匹配则输出位置,匹配则弹出栈顶元素:
全栈若城
2024/02/29
2750
LeetCode 1249. 移除无效的括号(栈+set / deque)
你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
Michael阿明
2020/07/13
4620
LeetCode 1003. 检查替换后的词是否有效(栈)
对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。
Michael阿明
2020/07/13
8260
LeetCode 1003. 检查替换后的词是否有效(栈)
使括号有效的最少添加
给定一个由(和)括号组成的字符串S,我们需要添加最少的括号(或是),可以在任何位置,以使得到的括号字符串有效。 从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
WindRunnerMax
2020/09/01
4400
LeetCode 1021. 删除最外层的括号(栈)
1. 题目 题目链接 示例 1: 输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())", 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。 示例 2: 输入:"(()())(())(()(()))" 输出:"()()()()(())" 解释: 输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()((
Michael阿明
2021/02/20
3770
LeetCode 1021. 删除最外层的括号(栈)
LeetCode - 使括号有效的最少添加
原题地址:https://leetcode-cn.com/problems/minimum-add-to-make-parentheses-valid/
晓痴
2019/07/24
5000
LeetCode - 使括号有效的最少添加
算法学习笔记-栈(stack)
这题跟上面的题目是一模一样的,最少添加就是有多少括号没有对象,,没有对象的括号都会留在栈中,有的都会出栈,所以就是求栈的大小;
买唯送忧
2021/05/23
4300
LeetCode 1190. 反转每对括号间的子串(栈)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
8480
LeetCode 1190. 反转每对括号间的子串(栈)
LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)
给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
Michael阿明
2020/07/13
1.3K0
LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)
LeetCode 32. 最长有效括号(栈&DP)
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
Michael阿明
2021/02/20
3620
LeetCode 32. 最长有效括号(栈&DP)
【leetcode刷题】T29-使括号有效的最少添加个数
Given a string S of '(' and ')' parentheses, we add the minimum number of parentheses ( '(' or ')', and in any positions ) so that the resulting parentheses string is valid.
木又AI帮
2019/07/17
4530
LeetCode 678. 有效的括号字符串(栈)
给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:
Michael阿明
2020/07/13
7170
LeetCode 678. 有效的括号字符串(栈)
LeetCode 921. 使括号有效的最少添加
https://leetcode-cn.com/problems/minimum-add-to-make-parentheses-valid/
freesan44
2021/10/05
1620
LeetCode 921. 使括号有效的最少添加
LeetCode 第 32 场双周赛(983/2957,前33.2%)
全国排名: 983 / 2957,33.2%;全球排名: 2962 / 10463,28.3%
Michael阿明
2021/02/19
3590
米哈游面试算法题:有效的括号
描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
GeekLiHua
2025/01/21
1480
leetcode394字符串解码(回溯|栈)「建议收藏」
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
全栈程序员站长
2022/09/22
2420
Leetcode|栈判断括号有效性|20. 有效的括号
1 左括号栈 注意事项:当遍历到右括号时,对应左括号栈顶有两种情况 右括号比左括号多—栈为空,表示之前左括号已匹配完,当前右括号无匹配左括号 栈非空,但栈顶左括号于当前右括号不匹配 左括号比右括号多—遍历结束栈不为空 class Solution { public: bool isValid(string s) { if (s.size() == 1) return false; stack<char> stk; unordered_map<cha
SL_World
2021/09/22
2770
Leetcode|栈判断括号有效性|20. 有效的括号
LeetCode 557. 反转字符串中的单词 III(栈)
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
Michael阿明
2021/02/20
5410
LeetCode 557. 反转字符串中的单词 III(栈)
推荐阅读
相关推荐
LeetCode 20. 有效的括号(栈)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验