如果每个开头符号都有一个对应的结尾,则括号序列被称为“平衡”
符号和括号对正确嵌套。例如,(()(()))是平衡的,而(()))()
不是。多个圆括号是相同的概念,除了圆括号具有类型并且每个圆括号是开放的
符号具有相同类型的对应关闭符号。例如,(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]。
这是提供给我的问题。我的实现编译良好,但没有给我预期的结果,我不知道为什么。 Ive手动实现的堆栈也是一项要求。
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;
}
}