92分求助,有第五个测试点re了,真找不出来错了呜呜

P1241 括号序列

mochuen @ 2022-01-29 12:03:30


import java.io.BufferedInputStream;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Set;

public class Main {

    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    static Scanner scanner = new Scanner(new BufferedInputStream(System.in));
    static boolean[] vis=new boolean[1000];
    public static void main(String[] args) {
        String s = scanner.next();
        if(s==null)return;
        for(int i=1;i<s.length();i++) {//从前往后扫描
            if(s.charAt(i)==')') {//如果找到右括号

                for(int j=i-1;j>=0;j--) {
                    if(s.charAt(j)=='('&&vis[j]==false) {
                        vis[j]=true;vis[i]=true;//如果找到左括号,将这两个括号标记
                        break;//标记了就退出
                    }
                    else if(s.charAt(j)=='['&&vis[j]==false)break;//如果找到另一种括号,直接退出
                }
            }else if(s.charAt(i)==']') {//同上

                for(int j=i-1;j>=0;j--) {
                    if(s.charAt(j)=='['&&vis[j]==false) {
                        vis[j]=true;vis[i]=true;
                        break;
                    }
                    else if(s.charAt(j)=='('&&vis[j]==false) {
                        break;
                    }
                }
            }
        }
        for(int i=0;i<s.length();i++) {
            if(!vis[i]) {//如果没有标记,补全再输出
                if(s.charAt(i)=='('||s.charAt(i)==')') {
                    out.print("()");
                }else out.print("[]");
            }else out.print(s.charAt(i));//否则直接输出
        }

        out.flush();

    }

}

by SuzumiyaRinko_ @ 2022-02-12 18:40:38

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Scanner;

public class Main
{       

    static String ori;
    static char[] tempS;
    static int len = -1;
    static boolean[] match;

    public static void main( String[] args ) throws IOException
    {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        ori = sc.nextLine();

        len = ori.length();
        tempS = ori.toCharArray();

        match = new boolean[len]; //0~len-1

        for( int i=0;i<=len-1;i++ )
        {
            if( tempS[i] == ')' )
            {
                for( int k=i-1;k>=0;k-- )
                {
                    if( tempS[k] == '(' && match[k] == false )
                    {
                        match[i] = match[k] = true;
                        break;
                    }
                    else if( tempS[k] == '[' && match[k] == false ) break;
                }
            }
            else if( tempS[i] == ']' )
            {
                for( int k=i-1;k>=0;k-- )
                {
                    if( tempS[k] == '[' && match[k] == false )
                    {
                        match[i] = match[k] = true;
                        break;
                    }
                    else if( tempS[k] == '(' && match[k] == false ) break;
                }
            }
        }

        for( int i=0;i<=len-1;i++ )
        {
            if( match[i] == true ) System.out.print(tempS[i]);
            else 
            {
                if( tempS[i] == '(' || tempS[i] == ')' ) System.out.print("()");
                else System.out.print("[]");
            }
        }

    }
}

这个是AC的代码 (但是我觉得您那个也没问题?)


by xu2237803016 @ 2022-02-12 19:52:58

我甚至把所有代码都用try catch包住了还是报re 记录

就离谱,我怀疑是直接输入了空白字符


by Starship_ @ 2022-02-14 10:46:17

我是用C++写的,一开始定义了一个字符数组,再用scanf,遇到了和你一样的问题,数组开到200了也没用,就一个测试数据过不去,然后我换成string类型之后用cin读就AC了,俺不知道为啥。。。。


by Starship_ @ 2022-02-14 10:49:24

好吧,俺找到俺的问题了,就是数组开小了,数组开到10005就过了


|