LeetCode 1541. Minimum Insertions to Balance a Parentheses String

LeetCode 1541. Minimum Insertions to Balance a Parentheses String (平衡括号字符串的最少插入次数)

题目

链接

https://leetcode-cn.com/problems/minimum-insertions-to-balance-a-parentheses-string/

问题描述

给你一个括号字符串 s ,它只包含字符 '(' 和 ')' 。一个括号字符串被称为平衡的当它满足:

任何左括号 '(' 必须对应两个连续的右括号 '))' 。
左括号 '(' 必须在对应的连续两个右括号 '))' 之前。
比方说 "())", "())))" 和 "())))" 都是平衡的, ")()", "()))" 和 ")" 都是不平衡的。

你可以在任意位置插入字符 '(' 和 ')' 使字符串平衡。

请你返回让 s 平衡的最少插入次数。

输入:s = ")"
输出:1
解释:第二个左括号有与之匹配的两个右括号,但是第一个左括号只有一个右括号。我们需要在字符串结尾额外增加一个 ')' 使字符串变成平衡字符串 "))" 。

示例

输入:s = ")"
输出:1
解释:第二个左括号有与之匹配的两个右括号,但是第一个左括号只有一个右括号。我们需要在字符串结尾额外增加一个 ')' 使字符串变成平衡字符串 "))"

提示

1 <= s.length <= 10^5
s 只包含 '(' 和 ')' 。

思路

同样思路,从左向右,不过需要注意,添加时左括号应该一直在左边,need的奇偶性要注意。

最后输出结果。

复杂度分析

时间复杂度 O(n)
空间复杂度 O(1)

代码

Java

    public int minInsertions(String s) {
        char[] ch = s.toCharArray();
        int need = 0;
        int ans = 0;
        for (char c : ch) {
            if (c == '(') {
                need+=2;
                if(need%2==1){
                    ans++;
                    need--;
                }
            }else {
                need--;
                if(need==-1){
                    ans++;
                    need=1;
                }
            }
        }
        return ans + need;
    }
posted @   cheng102e  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-03-25 命令行发送SMTP协议邮件(163邮箱)
点击右上角即可分享
微信分享提示