<?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)