一.题目要求
括号匹配的检验题目描述:采用栈实现,练习进栈入栈函数的编写.输入:输入的第一行包含一个数,nn 表示要用例的个数接下来是 n 行由括号构成的字符串,包含"("、")"、"["、"]"。输出: 对每一测试用例,用一行输出结果,如果匹配,输出“YES”,否则输出“NO”输入样例:2[([][]())])[]()输出样例:YESNO
二.栈
题目要求用栈实现,先对栈进行一个简单的了解。
2.1栈的定义
栈是一种特殊的线性表,只允许从一端进入或删除。假设栈是一个瓶子,那么瓶口就是栈顶,瓶底就是栈底。栈顶是动态的,栈顶是动态的,随插入的元素而变化。栈的插入称为入栈,删除称为出栈。
2.2栈的特点
“先进后出,后进先出”,后进入的元素先处理。
2.3栈的基本操作
boolean empty(); 判断栈是否为空
E push(E item); 插入元素
E pop(); 删除栈顶元素
E peek(); 获取栈顶元素
int size(); 返回栈中元素个数
三.分析
要匹配括号,则同一种括号的左边和右边数量要相等,此时可以将每个括号提取出来,当遇到左括号时将字符进插入到栈中,遇到右括号时,先判断该括号是否与栈顶元素匹配(不会无端出现左边没有的种类),若匹配则删除栈顶元素。在遍历完所有字符后,如果栈中还有元素则说明不匹配。
四.代码
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack<Character> stack = new Stack();
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String a = sc.next();
for (int j = 0; j < a.length(); j++) {
char c = a.toString().charAt(j);
if (c == '['||c == '('){
stack.push(c);
continue;
}
else if(c==']'||c==')'){
if(!stack.empty()){
char top = stack.peek();
if((c==']'&&top=='[')||(c==')'&&top=='(')){
stack.pop();
}
continue;
}
if(stack.empty()){
stack.push(c);
}
}
}
if(stack.empty()){
System.out.println("YES");
}
else {
System.out.println("NO");
}
}
}
}