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