如何检查堆栈的子堆栈?

时间:2018-12-28 21:10:42

标签: java stack

例如,我要问这个问题:

subStack:[7,15,9]

还有主堆栈:

mainStack:[45,24,18,7,8,233,91,531,7,15,9,45,32,1]

我要的是-subStack是否在mainStack中。

我在论文中都在挣扎,我很乐意得到一些帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

s1-主堆栈,s2-子堆栈???和s3-临时堆栈

您可以在堆栈s1和s2上进行窥视和比较,如果它们匹配,则可以从s1和s2弹出,将s2的流行存储在s3中。如果s2为空,则s2为s1的子堆栈,否则从s3恢复s2,重复上述步骤,直到s1或s2为空。

private boolean isSubStack(java.util.Stack<Integer> s1, java.util.Stack<Integer> s2) {
    while (!s1.isEmpty() && !s2.isEmpty()) {
        while (!s1.isEmpty() && s1.peek() != s2.peek()) {
            s1.pop();
        }
        java.util.Stack<Integer> s3 = new java.util.Stack<Integer>();
        while (!s1.isEmpty() && !s2.isEmpty() && s2.peek().equals(s1.peek())) {
            s1.pop();
            s3.push(s2.pop());
        }
        if (!s2.isEmpty()) {
            while (!s3.isEmpty()) {
                s2.push(s3.pop());
            }
        }
    }
    return s2.isEmpty();
}