1. 程式人生 > >JavaStudy——0052:括號匹配

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(); } }