设计一个算法判定括号是否正确配对(包括三种括号并且需要考虑大中小三种括号的嵌套顺序)。
算法思想:
- 出现左括弧,进栈
- 出现右括弧,先判断栈是否为空
(1)如果不为空,看是否匹配栈顶括号。
(a)如果匹配,栈顶元素出栈。 - 最后检查栈是否空,如果为空,匹配成功,否则不匹配
import java.util.Scanner;
import java.util.Stack;
public class Main{
public static void input(){
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(f(str));
scanner.close();
}
private static boolean f(String string) {
// 出现左括弧,进栈
// 出现右括弧,先判断栈是否为空
// 如果为空,右括号多余,不匹配
// 如果不为空,看是否匹配栈顶括号
// 如果匹配,栈顶元素出栈
// 如果不匹配,直接是false类
// 最后检查栈是否空,如果为空,匹配成功,否则不匹配
Stack<Character> stack = new Stack<>(); //利用栈空间辅助
for (int i = 0; i <string.length() ; i++) {
Character ch = string.charAt(i);
switch (ch){
case '(':
stack.push(ch); // 如果是左括号,直接进栈
break;
case ')': // 如果是右括号,先判断栈是否为空,然后和栈顶元素配对,如果可以配对,则出栈。
if (!stack.empty() && stack.peek() == '(')
stack.pop();
break;
case '{':
stack.push(ch);
break;
case '}':
if (!stack.empty() && stack.peek() == '{')
stack.pop();
break;
case '[':
stack.push(ch);
break;
case ']':
if (!stack.empty() && stack.peek() == '[')
stack.pop();
break;
}
}
if (stack.empty())
return true;
return false;
}
public static void main(String[] args) {
input();
}
}