題目:輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序煞烫,請(qǐng)判斷第二個(gè)序列是否為該棧的彈出順序浑此。假設(shè)壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序滞详,序列4凛俱,5,3,2,1是該壓棧序列對(duì)應(yīng)的一個(gè)彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列.
核心代碼:
<pre><code>`
class StackOrder {
func isPopOrder(push:[Int],pop:[Int]) -> Bool {
if push.count == 0 || pop.count == 0 {
return false
}
var result = false
var popIndex:Int = 0
var pushData = push
var popData = pop
while pushData.count > 0 {
if pushData.count == popData.count && pushData[pushData.count-1] != popData[0] {
result = false
break
}
if pushData[pushData.count-1] == popData[popIndex] {
popIndex += 1
pushData.remove(at: pushData.count-1)
if popIndex == popData.count {
result = true
break
}
} else {
pushData.remove(at: pushData.count-1)
}
}
return result
}
}</code></pre> 測(cè)試代碼: <pre><code>
var popData:[Int] = [4,3,2,1,0]
var stackOrder:StackOrder = StackOrder()
var popResult:Bool = stackOrder.isPopOrder(push: pushData, pop: popData)
if popResult {
print("FlyElephant-(popData)是(pushData)棧的pop子序列")
} else {
print("FlyElephant-(popData)不是(pushData)棧的pop子序列")
}`</code></pre>