PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序...

本文介绍了一个PHP函数,用于判断给定的弹栈序列是否为特定压栈序列的有效输出。通过使用数组模拟栈操作来验证序列的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
    #输入一个栈的压栈序列和一个弹栈序列,判断该弹栈序列是否可能是压栈序列的输出
    #例如压栈序列 12345,则弹栈序列可以是 54321 或者 45321

    #解题思路,建一个空栈,按照压栈序列入栈,当压入的栈顶元素与弹栈序列的指针指向元素相同时,将元素弹出
    #直到将压栈序列的元素全部压完,如果弹栈序列是正确的,则最后栈内元素可以按照弹栈序列顺序弹出,最后栈为空
    #否则栈不为空
    function test($push, $pop) {
        $len = count($push);
        $stack = array();
        $i = 0;
        $j = 0;
        while ($i < $len) {
            array_push($stack, $push[$i]);
            $i++;

            echo "before: ";
            print_r($stack);
            while (!empty($stack) && $stack[count($stack) - 1] == $pop[$j]) {
                array_pop($stack);
                $j++;
            }
            echo "<br>after: ";
            print_r($stack);
            echo "<br>";
            echo "<br>";
        }

        return empty($stack);
    }

    $push = array(1, 2, 3, 4, 5);
    $pop = array(4, 5, 3, 1, 2);

    $t = test($push, $pop);
    var_dump($t);
?>

before: Array ( [0] => 1 ) 
after: Array ( [0] => 1 ) 

before: Array ( [0] => 1 [1] => 2 ) 
after: Array ( [0] => 1 [1] => 2 ) 

before: Array ( [0] => 1 [1] => 2 [2] => 3 ) 
after: Array ( [0] => 1 [1] => 2 [2] => 3 ) 

before: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) 
after: Array ( [0] => 1 [1] => 2 [2] => 3 ) 

before: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 ) 
after: Array ( [0] => 1 [1] => 2 ) 

bool(false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值