使用堆栈的多括号

时间:2019-03-14 12:32:48

标签: java data-structures stack adt parentheses

如果每个开头符号都有一个对应的结尾,则括号序列被称为“平衡” 符号和括号对正确嵌套。例如,(()(()))是平衡的,而(()))() 不是。多个圆括号是相同的概念,除了圆括号具有类型并且每个圆括号是开放的 符号具有相同类型的对应关闭符号。例如,(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;
}
}

0 个答案:

没有答案