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就过了