# 「力扣」第 946 题:验证栈序列(中等)

# 题目描述

给定 pushedpopped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示:

  • 1 <= pushed.length <= 1000
  • 0 <= pushed[i] <= 1000
  • pushed 的所有元素 互不相同
  • popped.length == pushed.length
  • poppedpushed 的一个排列

# 思路分析

说明:使用栈模拟。

参考代码

import java.util.Stack;

public class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int len1 = pushed.length;
        int len2 = popped.length;

        if (len1 == 0 && len2 == 0){
            return true;
        }

        if (len2 == 0 || len1 != len2) {
            return false;
        }

        int index = 0;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < len1; i++) {
            stack.push(pushed[i]);

            while (!stack.isEmpty() && stack.peek() == popped[index]) {
                stack.pop();
                index++;
            }

            // 调试代码
            // System.out.println(stack);
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        int[] pushed = {1, 2, 3, 4, 5};
        int[] popped = {4, 5, 3, 2, 1};
        Solution solution = new Solution();
        boolean res = solution.validateStackSequences(pushed, popped);
        System.out.println(res);
    }
}

作者:liweiwei1419 链接:https://suanfa8.com/stack/solutions-1/0946-validate-stack-sequences 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 11/19/2024, 1:33:17 AM