Java设计程序括号匹配检测:利用顺序栈,编写程序检测给定字符串中的括号是否匹配。例如,输入"({}[()])"应该返回匹配,而输入"({[})"应该返回不匹配。
时间: 2024-09-28 20:06:22 浏览: 38
在Java中,你可以使用一个栈(stack)来检测括号匹配。栈是一种后进先出(LIFO)的数据结构,非常适合处理括号配对问题。我们遍历输入字符串,当遇到左括号时压入栈中,当遇到右括号时,检查栈顶的左括号是否与其相配对,如果不匹配或者栈已经空了,则说明括号不匹配。以下是简单的代码示例:
```java
import java.util.Stack;
public class BracketMatcher {
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
String openBrackets = "({["; // 左括号列表
String closeBrackets = ")}]"; // 右括号列表
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (openBrackets.contains(Character.toString(c))) { // 如果是左括号
stack.push(c); // 压入栈中
} else if (closeBrackets.contains(Character.toString(c))) { // 如果是右括号
if (stack.isEmpty() || stack.pop() != openBrackets.charAt(closeBrackets.indexOf(c))) { // 检查栈顶是否为对应的左括号
return false;
}
}
}
// 如果还有剩余的左括号未关闭,则不匹配
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println(isValid("( {} )")); // 输出 true,匹配
System.out.println(isValid("{ [ ] }}")); // 输出 false,不匹配
}
}
```
在这个程序中,`isValid`函数接收一个字符串`s`,它首先创建一个空栈,然后逐字符检查。如果遇到右括号,会尝试弹出栈顶的左括号并与之匹配;如果没有左括号或者弹出的左括号与当前的右括号不匹配,返回`false`表示不匹配。
阅读全文