Как проверить вложенный стек? - PullRequest
0 голосов
/ 29 декабря 2018

Задавая этот вопрос, я имею в виду, например:

subStack:[7,15,9]

И основной стек:

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

То, что меня спрашивают, - если subStack где-то вmainStack.

Я борюсь со всем этим в своих бумагах, я был бы рад получить некоторую помощь.Спасибо!

1 Ответ

0 голосов
/ 29 декабря 2018

s1 - основной стек, s2 - вспомогательный стеки s3 - временный стек

Вы можете просматривать и сравнивать оба стека s1 и s2, если они совпадают, вы можете получить из s1 и s2, сохранить pop из s2 в s3.если s2 становится пустым s2 является подстаком s1, иначе восстановите s2 из s3, повторяйте шаги до тех пор, пока 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...