扩号匹配

来源:互联网 发布:苹果免费看书软件 编辑:程序博客网 时间:2024/05/19 22:54

                                                                    扩号匹配

时间限制:
1000ms
内存限制:
65536kB
描述
判断一组匹配的左右扩号序列中,每一个右扩号与之相匹配成对的左扩号是整个扩号序列的第几个扩号。输出所有判断结果。
输入
输入有两行。
第一行输入一个整数(该整数必定是偶数),该整数表示扩号序列中一共有多少个扩号。
第二行输入用1和2分别代表左右扩号的扩号序列。例如输入序列11211222,表示扩号序列(()(()))。
输出
输出为一行。即挨个输出每个2(右扩号‘)’)与之相匹配的1(左扩号‘(’)在扩号序列中是第几个,用空格格开。
样例输入
412124112261121228112112222011211122122121122212
样例输出
1 32 12 4 12 5 4 12 6 5 9 4 12 15 14 1 19
import java.io.BufferedReader;  import java.io.IOException;  import java.io.InputStreamReader;  import java.util.ArrayList;    public class Main{        public static void main(String[] args) throws  IOException {            while(true){              BufferedReader br=new BufferedReader(new InputStreamReader(System.in));          int n=Integer.parseInt(br.readLine());          String[] st=br.readLine().split("");          ArrayList<Integer> ar1=new ArrayList<Integer>();          ArrayList<Integer> ar2=new ArrayList<Integer>();          for(int i=1;i<st.length;i++){              if(st[i].compareTo("1")==0)ar1.add(i);              else if(st[i].compareTo("2")==0)ar2.add(i);          }          for(int i=0;i<ar2.size();i++){              for(int j=ar1.size()-1;j>=0;j--)                  if(ar1.get(j)<ar2.get(i)){                      System.out.print(ar1.get(j)+" ");                  ar1.remove(j);break;                      }          }      }      }     }      


提示
输入的扩号总数一定为偶数。输入的12序列必定是匹配的,1和2的个数相等,必为扩号总数的一半。
测试数据有多组,采用while()循环输入。