括号补全问题

31 阅读1分钟

为了使括号字符串有效,我们需要确保每个左括号 ( 都有一个对应的右括号 )。我们可以使用栈来帮助我们解决这个问题。

解题思路

  1. 使用栈:遍历字符串,遇到左括号 ( 时,将其压入栈中。遇到右括号 ) 时,检查栈是否为空:

    • 如果栈为空,说明当前右括号没有对应的左括号,需要插入一个左括号。
    • 如果栈不为空,弹出栈顶元素(即匹配一个左括号)。
  2. 剩余的左括号:遍历结束后,栈中剩余的左括号数量就是需要插入的右括号数量。 `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); } }`