-
描述
-
现在,有一行括号序列,请你检查这行括号是否配对。
-
输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入
-
3 [(]) (]) ([[]()])
样例输出
-
No No Yes
package nyist.base; import java.util.Scanner; public class Main02 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub long start = System.currentTimeMillis(); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); String[] str = new String[x]; for (int i = 0; i < str.length; i++) { str[i] = sc.next(); } String s=null; for (int j = 0; j < str.length; j++) { s=str[j]; // System.out.println(str[1]); if (s.length() % 2 != 0) { System.out.println("No"); }else if(getFirstLocation(']',s)<getFirstLocation('[',s)||getFirstLocation(')', s)<getFirstLocation('(',s)){ System.out.println("No"); }else { String front=null; String behind=null; for(int m=0;m<s.length();m++){ // System.out.println("开始时刻m:"+m); if(m==0&&getResult(s.charAt(0),s.charAt(1))||m==1&&getResult(s.charAt(0),s.charAt(1))&&s.length()==2){ System.out.println("Yes"); break; } if(s.length()==4&&getResult(s.charAt(0),s.charAt(1))&&getResult(s.charAt(2), s.charAt(3))){ System.out.println("Yes"); break; } if(m==(s.length()/2)){ // System.out.println("m最后:"+m); System.out.println("No"); break; } if(getResult(s.charAt(m),s.charAt(m+1))){ // front=s.substring(0, m); behind=s.substring(m+2); s=front+behind; // System.out.println(s); // System.out.println(m); m=0; } } } } long end = System.currentTimeMillis(); // System.out.println("程序运行时间为:"+(end-start)); } public static boolean getResult(char m, char n) { boolean flag = false; if (m == '[' && n == ']') { flag = true; } if (m == '(' && n == ')') { flag = true; } return flag; } public static int getFirstLocation(char c,String s){ int location=-1; for(int i=0;i<s.length();i++){ if(s.charAt(i)==c){ location=i; break; } } return location; } }
括号配对问题
最新推荐文章于 2022-03-25 16:13:45 发布