思路
这道题问的就是第二个序列有没有可能是第一个序列的压栈出栈的玩法。这里直接模拟一个栈把pushed的元素一个个压进去,再拿一个指针从头指向popped序列。如果此时压进来的元素和指向的相等,那就有可能是这么玩的,此时就把模拟栈中的top元素压出来,指针++,这时候使用while循环判断有没有可能是这时候把栈中的元素拿出来的玩法,如果是那就while一直下去,如果不是这么玩法那就说明是弹的后面进来的元素,依次这么判断下去,如果你顺序不对导致玩法不对,这时候模拟栈中的元素不为空,指针也没继续“玩下去”,说明顺序不对,返回false了。
代码示例
func validateStackSequences(pushed []int, popped []int) bool {
stack:=[]int{}
pos:=0
for i:=0;i<len(pushed);i++{
stack=append(stack,pushed[i])
for len(stack)!=0 && popped[pos]==stack[len(stack)-1]{
stack=stack[:len(stack)-1]
pos++
}
}
return pos==len(popped)
}