java-シンプルな括弧マッチング問題


説明
現在、括弧の列がありますが、このかっこが合っているかどうか確認してください。
入力
1行目は1つの数N(0<N<=100)を入力し、Nグループのテストデータがあることを表します。後のN行は複数の入力データを入力し、各入力データは一つの文字列S(Sの長さは10000より小さく、Sは空の列ではない)であり、テストデータ群数は5グループより少ない。データ保証Sには「[]」、「()」の4種類の文字しか含まれていない。
出力
各入力データの出力が1ラインを占めています。この文字列に含まれる括弧がペアである場合、Yesが出力されます。ペアでない場合はNoが出力されます。
サンプル入力
3
[(])
(])
([[]()])
サンプル出力
No
No
Yes
import java.util.Scanner;
import java.util.Stack;

/**
 * @author Owner
 * 
 */
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n= sc.nextInt();//3       
		
		Stack<Character> stack = null;
		
		while(n!=0){
			
			//             []() [(])
			String str = sc.next();
			//           ,     
			if(str.length() % 2 == 1){
				System.out.println("No");
			}else{
				//       
				stack = new Stack<Character>();
				
				//          []() [(])
				for(int i=0;i<str.length();i++){
					if(stack.isEmpty()){
						//      
						stack.push(str.charAt(i));
					}else if(stack.peek() == '[' && str.charAt(i) == ']' || stack.peek() == '(' && str.charAt(i) == ')'){
						//            ,    ,
						stack.pop();
					}else{
						
						stack.push(str.charAt(i));
					}
				}
				
				if(stack.isEmpty()){
					//      ,      
					System.out.println("Yes");
				}else{
					//      ,     
					System.out.println("No");
				}
			}
			
			n--;
		}
		
	}
}