一、前言:
这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完,并成功实现,会陆续更新,记得三连哈哈! 所有答案供参考,不是标准答案,是博主自己研究的写法。
二、 题目要求如下:
(第 15 题) 括号匹配的检验(难度系数85)
括号匹配的检验
标准输入输出
题目描述:
采用栈实现,练习进栈入栈函数的编写.
输入:
输入的第一行包含一个数,n
n表示要用例的个数
接下来是n行由括号构成的字符串,包含‘(’、‘)’、‘[’、‘]’。输出:
对每一测试用例,用一行输出结果,如果匹配,输出“YES”,否则输出“NO”
输入样例:
2
[([][]())]
)[]()
输出样例:
YES
NO
三、代码实现:(这里我并没有自己创建栈类,而是直接用Java中JDK提供的栈类:Stack,用已经有的操作栈的方法来实现括号匹配问题)
(1)自定义测试类:(代码实现原理在注释中)
package com.fs.st;import java.util.Stack; //可以直接用JDK提供的栈类
import java.util.Scanner;
public class Test_Match {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();while(n>0){String str =sc.next(); //先输入进来:第一行需要检验的括号//创建一个空栈,方便循环使用Stack<Character> stack = new Stack<Character>(); //<Character>表明实现栈时用到的数据都是字符型for(int i=0;i<str.length();i++){char c = str.charAt(i); //获取单个括号if(stack.empty()&&(c=='['||c=='(')){ //空栈时先入栈stack.push(c);continue;}if(stack.empty()&&(c==']'||c==')')){ //空栈时先入栈stack.push(c);continue;}if(!stack.empty()){char top = stack.peek(); //取栈顶元素与后面获取的单个括号比较if((top=='['&&c==']')||(top=='('&&c==')')){stack.pop(); //若相同则出栈,再判断下个获取的单个括号}else{stack.push(c); //若不同则将后面获取的单个括号入栈}}}if(stack.empty()){ //最后判断完了,如果栈为空,则全部匹配成功System.out.println("YES");}else { //否则栈不为空,则还有剩余,则匹配失败System.out.println("NO");}n--; //循环测试总次数自减}}
}
四、不同情况下的测试结果:
<1>题目的测试输入样例:
<2>
<3>
<4>
还有很多很多情况,就请大家去测试了,这里就不一一展示测试了。