Последовательность скобок называется «сбалансированной», если каждому открывающему символу соответствует закрывающий символ.
символ и пары скобок правильно вложены. Например, (() (())) является сбалансированным и (())) ()
не является. Несколько круглых скобок - это та же концепция, за исключением того, что круглые скобки имеют типы и каждый открытый
Символ имеет соответствующий символ закрытия того же типа. Например, (0 (1) 1 (2 (0) 0) 2) 0 сбалансировано, в то время как
(0 (1) 1 (2 (3) 2) 2) 0 и (2 (0) 2) 2 не сбалансированы. Мы предполагаем последовательность из нескольких скобок, образованную n
Символ представлен двумя массивами: массивом p целых чисел и массивом логических значений b, где p [i] обозначает
тип i-го символа и b [i] указывают, является ли i-й символ открытым (ложным) или близким символом
(правда). Например, для (2 (0) 2) 2 p включает [2, 0, 2, 2], а b включает [false, false, true, true].
Это вопрос, предоставленный мне. Моя реализация компилируется нормально, но она не дает мне ожидаемого результата, и я не могу понять, почему. Я реализовал стек вручную, так как это тоже требование.
public class Stack
{
protected char[] symb;
protected int[] number;
protected int index;
protected int size;
public Stack(int newSize)
{
size = newSize;
symb = new char[size];
number = new int[size];
index = 0;
}
public void push (char parnth, int num )
{
if (index < size)
{
symb[index++] = parnth;
number[index++]=num;
}
}
public boolean isEmpty()
{
return (index==0);
}
public char topSymb ()
{
char topItem='\0';
if (! isEmpty () )
{
topItem = symb [index -1];
}
return topItem ;
}
public int topNum()
{
int topItem = 0;
if(!isEmpty())
{
topItem = number[index-1];
}
return topItem;
}
public char popSymb () {
char topItem = topSymb () ;
if (! isEmpty () )
{
index --;
}
return topItem ;
}
public int popNum ()
{
int topItem = topNum();
if(!isEmpty())
{
index--;
}
return topItem;
}
}
public class Parenthesis
{
private static final char OPEN = '(';
private static final char CLOSE = ')';
public static boolean isPair(char char1, char char2, int num1, int num2)
{
if(char1 == OPEN && char2 == CLOSE && num1 == num2)
{
return true;
}
return false;
}
public static boolean checkBalanced(int[] p, boolean[] b)
{
Stack storage = new Stack(b.length);
for(int i=0; i<p.length; i++)
{
if(b[i]==false)
{
char o=OPEN;
int numO=p[i];
storage.push(o, numO);
}
else if(b[i]==true)
{
char c=CLOSE;
int numC=p[i];
if (storage.isEmpty() ||
!isPair(c,storage.popSymb(),storage.popNum(),numC))
{
return false;
}
}
}
return true;
}
}