JavaStudy——0052:括号匹配

总时间限制: 1000ms 内存限制: 65536kB

描述
判断一组匹配的左右扩号序列中,每一个右扩号与之相匹配成对的左扩号是整个扩号序列的第几个扩号。输出所有判断结果。

输入
输入有两行。
第一行输入一个整数(该整数必定是偶数),该整数表示扩号序列中一共有多少个扩号。
第二行输入用1和2分别代表左右扩号的扩号序列。例如输入序列11211222,表示扩号序列(()(()))。
输出
输出为一行。即挨个输出每个2(右扩号‘)’)与之相匹配的1(左扩号‘(’)在扩号序列中是第几个,用空格格开。

样例输入

4
1212
4
1122
6
112122
8
11211222
20
11211122122121122212

样例输出

1 3
2 1
2 4 1
2 5 4 1
2 6 5 9 4 12 15 14 1 19

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

Accepted代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while (in.hasNext()) {
            int n=in.nextInt();in.nextLine();
            String s=in.nextLine();
            char[] a=s.toCharArray();
            for (int i=1;i<n;i++) {
                if (a[i]=='2') {
                    for (int j=i;j>=0;j--) {
                        if (a[j]=='1') {
                            a[j]=' ';
                            System.out.print((j+1)+" ");
                            break;
                        }
                    }
                }
            }
            System.out.println();
        }
        in.close();
    }
}

另:

import java.util.Scanner;
import java.util.Stack;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while(in.hasNextInt()) {
            int n=in.nextInt();
            String s=in.next();
            Stack<Integer> st=new Stack<Integer>();
            for(int i=0;i<n;i++) {
                int a=s.charAt(i)-'0';
                if(a==1)
                    st.push(i+1);
                else
                    System.out.print(st.pop()+" ");
            }
            System.out.println();
        }
        in.close();
    }
}

你可能感兴趣的:(OpenJudge,-,javastudy)