使括号有效的最少添加
难度:
标签:
题目描述
代码结果
运行时间: 19 ms, 内存: 16.1 MB
// Java Stream solution
// Problem: Given a string s consisting of '(' and ')', return the minimum number of parentheses we must add to make the resulting string valid.
// Approach: Use IntStream to iterate through the string and calculate the necessary number of parentheses to add.
import java.util.stream.IntStream;
public class SolutionStream {
public int minAddToMakeValid(String s) {
int leftBrackets = 0; // Number of unmatched '(' brackets
int rightBracketsToAdd = 0; // Number of ')' brackets to add
rightBracketsToAdd = IntStream.range(0, s.length())
.map(i -> s.charAt(i) == '(' ? 1 : -1)
.reduce(0, (balance, x) -> {
if (balance + x < 0) {
rightBracketsToAdd++;
return balance;
}
return balance + x;
});
return leftBrackets + rightBracketsToAdd;
}
}
解释
方法:
本题解采用栈来处理括号匹配问题,从而计算使括号字符串有效所需的最少括号数。遍历给定字符串s中的每个字符,使用栈来跟踪未匹配的括号。对于每个遇到的'(',将其推入栈中。对于每个遇到的')',首先检查栈是否为空或栈顶元素是否不是'(',若是,则将')'推入栈;若不是,则从栈中弹出一个'(',表示匹配成功。最终栈中剩余的元素数量即为需要添加的括号数,因为这些是未能匹配的括号。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么选择使用栈作为数据结构来解决这个问题?有没有其他数据结构也可以解决同样的问题?
▷🦆
在算法中,你是如何处理连续多个 ')' 字符的情况的,能否详细说明其对栈的影响?
▷🦆
在代码中对于 ')' 的处理逻辑中,存在 `len(stack) != 0` 的判断,请问在什么情况下这个条件是必需的?
▷🦆
你提到栈中剩余的元素数量即为需要添加的括号数,这里是否包括了所有情况,比如全部是 '(' 或全部是 ')' 的情况?
▷