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

该博客讨论了一个算法问题,即如何计算使不合法括号字符串变为有效的最少添加括号数量。提供的Java代码实现通过使用栈数据结构来检查和解决此问题。对于给定的输入字符串,算法遍历每个字符,当遇到左括号时将其压入栈中,遇到右括号时检查栈顶是否有左括号,没有则计数增加,否则栈顶元素弹出。最后,栈中剩余的括号数量也需要添加到总计数中,因为它们无法匹配。
摘要由CSDN通过智能技术生成

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

 
给定一个由 '('  ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效。
从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
  • 它是一个空字符串,或者
  • 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串。
给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。

样例

样例 1:
输入: "())"
输出: 1
样例 2:
输入: "((("
输出: 3
样例 3:
输入: "()"
输出: 0
样例 4:
输入: "()))(("
输出: 4

注意事项

 

S.length <= 1000
S 只包含 '('  ')' 字符。
 
public class Solution {
    /**
     * @param S: the given string
     * @return: the minimum number of parentheses we must add
     */
    public int minAddToMakeValid(String S) {
        Stack<Character> stack = new Stack<>();
            int flag=0;
            for (int i = 0; i < S.length(); i++) {
                char c=S.charAt(i);
                if (c=='('){
                    stack.add(c);
                }else {
                    if (stack.empty()) {
                        flag++;
                    }else {
                        stack.pop();
                    }
                }
            }
            return flag+stack.size();
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值