1. 程式人生 > >112th LeetCode Weekly Contest Validate Stack Sequences

112th LeetCode Weekly Contest Validate Stack Sequences

Given two sequences pushed and popped with distinct values, return true if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.

 

Example 1:

Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
Output: true
Explanation: We might do the following sequence:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

Example 2:

Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
Output: false
Explanation: 1 cannot be popped before 2.

 

Note:

  1. 0 <= pushed.length == popped.length <= 1000
  2. 0 <= pushed[i], popped[i] < 1000
  3. pushed
     is a permutation of popped.
  4. pushed and popped have distinct values.

判斷棧的合法性

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        if(pushed.size()==0
&&pushed.size()==0){ return true; } if(pushed.size()!=popped.size()){ return false; } stack<int>s; int index = 0,outdex = 0; while(index<pushed.size()&&outdex<=popped.size()){ if(pushed[index]==popped[outdex]){ index++; outdex++; }else if(!s.empty()&&popped[outdex]==s.top()){ while(!s.empty()&&popped[outdex]==s.top()){ s.pop(); outdex++; } }else{ s.push(pushed[index]); index++; } if (index >= popped.size())//如果入棧序列已經走完,出棧序列和棧頂元素一一比較 { while (!s.empty() && popped[outdex]==s.top()) { s.pop(); outdex++; } //如果和棧中比較完,兩個序列都走完了,即表明順序合法 if (index == pushed.size() && outdex == popped.size()) { return true; } else { return false; } } } } };