ACM括号匹配问题(java实现)

描述:
现在,有一行括号序列,请你检查这行括号是否配对。
输入:
第一行输入一个数N0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

样例输入:
3
[(])
(])
([[]()])

样例输出:
No
No
Yes

代码实现:

package com.du.acm1;

import java.util.Scanner;
import java.util.Stack;

public class Matching {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer count = sc.nextInt();
        String[] str = new String[count];
        for(int i =0 ;i<count;i++){
            str[i] = sc.next();
        }

        for(int i = 0;i<count;i++){
            if(check(str[i])){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
        }
    }

    public static boolean check(String str){
        //定义一个boolean值的变量用来存储check方法的返回值
        boolean bo = false;
        //new一个堆栈用来存放str的的值,将str的使用charAt()方法放入到堆栈中
        Stack<Character> stack = new Stack<Character>();
        //首先得到传来的字符串的长度
        Integer len = str.length();
        //对字符串进行循环
        for(int i = 0;i<len;i++){
            //第一次的时候堆栈为空,将str字符串的第一个字符放进堆栈中
            if(stack.isEmpty()){
                stack.push(str.charAt(i));
            //在后来的比较中,用栈顶的元素和str的第一个元素进行比较,也就是堆栈中的元素和他相邻的元素进行比较
            }else if((stack.peek() == '[' && str.charAt(i) == ']')||(stack.peek() == '(' && str.charAt(i)== ')')){
                stack.pop();
            //当不满足第二个条件的时候继续压栈
            }else{
                stack.push(str.charAt(i));
            }
        }
        //当栈内元素为空的时候表示全部匹配,返回true
        if(stack.isEmpty()){
            bo = true;
        }else{
            bo = false;
        }
        return bo;
    }
}
    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/qq_17769897/article/details/76474312
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞