可以使用栈来模拟给定的序列。我们遍历 pushed 序列,并将元素依次入栈,每次入栈后,我们检查栈顶元素是否和 popped 序列的第一个元素相等,如果相等,则将栈顶元素出栈,并移动 popped 序列的指针,继续比较下一个栈顶元素和 popped 序列的下一个元素。最后,如果栈为空,说明 pushed 和 popped 序列是合法的推入和弹出操作序列的结果,返回 true,否则返回 false。

以下是使用 Golang 实现的代码:

func validateStackSequences(pushed []int, popped []int) bool {
    stack := make([]int, 0)
    popIndex := 0

    for _, num := range pushed {
        stack = append(stack, num)

        for len(stack) > 0 && stack[len(stack)-1] == popped[popIndex] {
            stack = stack[:len(stack)-1]
            popIndex++
        }
    }

    return len(stack) == 0
}

使用上述代码来判断输入的 pushed = [1,2,3,4,5] 和 popped = [4,5,3,2,1] 序列是否合法,调用函数 validateStackSequences(pushed, popped) 将返回 true。

Golang 栈序列验证:判断推入和弹出序列是否合法

原文地址: https://www.cveoy.top/t/topic/Uns 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录