📅  最后修改于: 2023-12-03 15:06:58.307000             🧑  作者: Mango
在编程中,我们经常需要检查括号表达式是否平衡,即左右括号是否配对出现。本文介绍一种使用给定的括号打印平衡的括号表达式的方法。
我们可以使用栈的数据结构对括号表达式进行处理。具体步骤如下:
创建一个空栈。
遍历括号表达式,如果是左括号,则将其压入栈中。
如果是右括号,则将栈顶元素弹出并判断是否与当前右括号匹配。如果匹配,则继续遍历;如果不匹配,则说明括号表达式不平衡,直接返回 false。
遍历完整个括号表达式后,检查栈是否为空。如果为空,则说明括号表达式是平衡的,返回 true;否则说明左右括号数量不等,返回 false。
如果括号表达式平衡,则创建一个新的字符串,遍历原字符串并复制左右括号,同时在左括号前添加左侧给定的括号,右括号后添加右侧给定的括号。
/**
* 检查括号表达式是否平衡,并给定左右括号打印平衡的括号表达式
* @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【】
这就是使用给定的括号打印平衡的括号表达式的方法。通过这种方式,我们可以更加清晰地展示括号表达式的结构,方便调试和理解。