我必须输出开放括号的最大数量,因此我实现了一个Stack,在其中插入所有开放括号,并为该属性提供了一个匹配方法。例如,如果在“(”之后有“)”我必须.pop()“(”。我现在的问题是,我从文本中得到了两个数组,其中一个数组我有开括号,第二个数组中有闭括号。
我的顺序符合我的意思。为了将括号推入堆栈中,我曾考虑使用“ for”来读取序列,当元素是一个开放的括号时,我会将其推入堆栈中。我用Array.asList进行了检查,因此当括号被打开并且打开括号的数组被压入堆栈后就包含了它。对于封闭的括号,我执行相同的操作,但是当关闭时,我必须检查括号是否首先打开,我实现了“ matching”方法。现在的问题是这种方法无法运行,在输出中,我总是-1,而不是开括号的数量
import java.io.*;
import java.util.*;
public class Esercizio1t {
public static boolean matching(String aperta, String chiusa) {
if (aperta == "(" && chiusa == ")") {
return true;
}
if (aperta == "[" && chiusa == "]") {
return true;
}
if (aperta == "`" && chiusa == "\'"){
return true;
}
if (aperta == "<" && chiusa == ">"){
return true;
}
if (aperta == "$" && chiusa == "&"){
return true;
}
if (aperta == "\\" && chiusa == "/"){
return true;
}
if (aperta == "?" && chiusa == "!"){
return true;
}
if (aperta == "{" && chiusa == "}"){
return true;
}else
return false;
}
public static void main(String[] args) throws IOException {
//String fileinput=args[0];
//String fileoutput=args[1];
Scanner br= new Scanner(new FileReader("Input1Es1.txt"));
BufferedWriter bw=new BufferedWriter(new
FileWriter("Outputtest.txt"));
String s = br.nextLine();
int dimensione=Integer.parseInt(s);
String s2 =br.nextLine();
String[] array=s2.split("");
String[] v = new String[dimensione];
String[] m = new String[dimensione];
for(int i=0;i<array.length;i++){
if(i<dimensione){
v[i]=array[i];
}else if(i>dimensione){
for(int j=0;j<array.length/i;j++){
m[j]=array[i];
}
}
}
String s3 = br.nextLine();
String[] c = new String[s3.length()];
c=s3.split("");
Stack<String> Pila = new Stack<String>();
int cont = 0;
int posizione = 0;
int contenitore = 0;
for (int i = 0; i<c.length; i++) {
if (Arrays.asList(v).contains(c[i])){
Pila.push(c[i]);
System.out.println(c[i]);
cont++;
}else if (Arrays.asList(m).contains(c[i])){
if(matching(Pila.peek(),c[i])){
posizione++;
if (posizione == 1) {
contenitore = cont;
}
Pila.pop();
}
}
}
if (Pila.empty() || posizione == 1) {
System.out.println(contenitore);
bw.write(Integer.toString(contenitore));
} else {
System.out.println(-1);
bw.write(Integer.toString(-1));
}
br.close();
bw.flush();
bw.close();
}
}
我有这个输入: 2 //不同类型的括号数 ([]] //打开和关闭括号 ((123([445()23] 4)()[()]))//检查顺序
在这种情况下,输出为: 5