括号配对

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述

现在,有一行括号序列,请你检查这行括号是否配对。

输入

第一行输入一个数N0<N<=100,表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符

输出

每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

样例输入

3

[(])

(])

([[]()])

样例输出

No

No

Yes

import java.util.*;
public class Main {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        while(n-->0){
            boolean flag=true;
        String str=sc.next();
        char ch[]=str.toCharArray();
        String s[]=new String[str.length()];
        for(int i=0;i<str.length();i++){
            s[i]=String.valueOf(ch[i]);
        }
           Stack<String> stack=new Stack<String>();
           for(int i=0;i<s.length;i++){
               if(s[i].equals("(")||s[i].equals("["))
                   stack.push(s[i]);
               else if(s[i].equals(")"))
               {
                   if(stack.isEmpty() || !stack.peek().equals("(")) {flag=false;break;}
                   else 
                       stack.pop();  
               }
               else if(s[i].equals("]"))
               {
                   if(stack.isEmpty() || !stack.peek().equals("[")){flag=false;break;}
                   else
                       stack.pop();
                   
                   
               }
           
           }
           
           if(!stack.isEmpty())flag=false;
           
           if(flag)
               System.out.println("Yes");
           else
               System.out.println("No");
        
          
            }
            
                sc.close();
    }
}
原文地址:https://www.cnblogs.com/watchfree/p/5313650.html