Swift-栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但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> 测试代码: <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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容