ACM 括号匹配问题,求大神指点迷津
赵一楽 2017-09-12 09:56:06 【我写的代码在自己电脑上测试没有问题,但是提交后总是提示runtime error】
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
【我写的java代码】
import java.util.Scanner;
/**
* 括号匹配问题 需求:屏幕输入 3 [(]) []([)] ([][)]] 输出结果 YES YES NO
*
* @author Distance
*
*/
public class Practice2 {
static String [] result = new String [1000];
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
// 定义一个数组,用来存储匹配结果
// for循环来判断执行几次循环
for (int i = 0; i < row; i++) {
Scanner scanner1 = new Scanner(System.in);
/*
* 为什么这里的scanner不能和上边的用一个scanner
*/
String str = scanner1.nextLine();
// 执行匹配函数,且每次的执行结果都存储到数组result中
int length = str.length();
char[] arr = str.toCharArray();
int a = 0;
int b = 0;
int c = 0;
int d = 0;
while (length > 0) {
for (int j = 0; j < arr.length; j++) {
if ("[".equals("" + arr[j])) {
a++;
}else if ("]".equals("" + arr[j])) {
b++;
}else if ("(".equals("" + arr[j])) {
c++;
}else if(")".equals("" + arr[j])) {
d++;
}
length--;
}
}
if ((a - b == 0) && (c - d == 0)) {
result[i] ="Yes";
} else {
result[i] = "No";
}
}
//遍历结果集
for (int i = 0; i < result.length; i++) {
if(result[i]!=null){
System.out.println(result[i]);
}
}
}
}