📜  使用给定的括号打印平衡的括号表达式(1)

📅  最后修改于: 2023-12-03 15:06:58.307000             🧑  作者: Mango

使用给定的括号打印平衡的括号表达式

在编程中,我们经常需要检查括号表达式是否平衡,即左右括号是否配对出现。本文介绍一种使用给定的括号打印平衡的括号表达式的方法。

实现思路

我们可以使用栈的数据结构对括号表达式进行处理。具体步骤如下:

  1. 创建一个空栈。

  2. 遍历括号表达式,如果是左括号,则将其压入栈中。

  3. 如果是右括号,则将栈顶元素弹出并判断是否与当前右括号匹配。如果匹配,则继续遍历;如果不匹配,则说明括号表达式不平衡,直接返回 false。

  4. 遍历完整个括号表达式后,检查栈是否为空。如果为空,则说明括号表达式是平衡的,返回 true;否则说明左右括号数量不等,返回 false。

  5. 如果括号表达式平衡,则创建一个新的字符串,遍历原字符串并复制左右括号,同时在左括号前添加左侧给定的括号,右括号后添加右侧给定的括号。

代码实现

/**
 * 检查括号表达式是否平衡,并给定左右括号打印平衡的括号表达式
 * @param s 括号表达式
 * @param left 左侧给定的括号
 * @param right 右侧给定的括号
 * @return 是否平衡
 */
public boolean isBalanced(String s, char left, char right) {
    Stack<Character> stack = new Stack<>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c == left) {
            stack.push(c);
        } else if (c == right) {
            if (stack.isEmpty() || stack.pop() != left) {
                return false;
            }
        }
    }
    return stack.isEmpty();
}

/**
 * 给定括号表达式打印平衡的括号表达式
 * @param s 括号表达式
 * @param left 左侧给定的括号
 * @param right 右侧给定的括号
 * @return 平衡的括号表达式
 */
public String printBalanced(String s, char left, char right) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c == left || c == right) {
            sb.append(left);
            sb.append(c);
            sb.append(right);
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

使用示例

假设给定的括号为 ,则调用方法如下:

String s = "【4 * (3 + 2) - 1] / 5】";
if (isBalanced(s, '【', '】')) {
    String balanced = printBalanced(s, '【', '】');
    System.out.println(balanced);
} else {
    System.out.println("Not balanced!");
}

输出结果为:

【4 * 【(】3 + 2【)】 - 1【]】 / 5【】

这就是使用给定的括号打印平衡的括号表达式的方法。通过这种方式,我们可以更加清晰地展示括号表达式的结构,方便调试和理解。