为了使括号字符串有效,我们需要确保每个左括号 ( 都有一个对应的右括号 )。我们可以使用栈来帮助我们解决这个问题。
解题思路
-
使用栈:遍历字符串,遇到左括号
(时,将其压入栈中。遇到右括号)时,检查栈是否为空:- 如果栈为空,说明当前右括号没有对应的左括号,需要插入一个左括号。
- 如果栈不为空,弹出栈顶元素(即匹配一个左括号)。
-
剩余的左括号:遍历结束后,栈中剩余的左括号数量就是需要插入的右括号数量。 `public class Main { public static int solution(String s) { // 使用栈来辅助匹配括号 Stack stack = new Stack<>(); int insertions = 0; // 记录需要插入的括号数量
for (char c : s.toCharArray()) { if (c == '(') { // 遇到左括号,压入栈中 stack.push(c); } else if (c == ')') { // 遇到右括号,检查栈是否为空 if (stack.isEmpty()) { // 如果栈为空,需要插入一个左括号 insertions++; } else { // 栈不为空,弹出栈顶元素(匹配一个左括号) stack.pop(); } } } // 栈中剩余的左括号数量就是需要插入的右括号数量 insertions += stack.size(); return insertions;}
public static void main(String[] args) { System.out.println(solution("()") == 0); System.out.println(solution("(((") == 3); System.out.println(solution("()") == 0); System.out.println(solution("()))((") == 4); } }`