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 @ 2022-03-25 17:56  cheng102e  阅读(34)  评论(0编辑  收藏  举报