刚开始代码写的很不简洁,超时了,举例子也都能过,如下:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> s;
if(pushV.size()!=popV.size()) return false;
if(pushV.size()==0||popV.size()==0) return true;
int j=0;
for(int i=0;i<popV.size();i++){
if(s.top()==popV[i]){
s.pop();
j++;
continue;
}
for(;j<pushV.size();j++){
s.push(pushV[j]);
if(pushV[j]==popV[i]) break;
}
if(s.top()==popV[i]){
s.pop();
j++;
continue;
}
if(j==pushV.size()&&i!=popV.size()) return false;
}
return true;
}
};
后来参考题解,发现可以简化很多,使用while也很省力
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> s;
int i=0,j=0;
while(i<pushV.size()){
if(pushV[i]!=popV[j]) s.push(pushV[i++]);
else{
i++;j++;
while(!s.empty()&&s.top()==popV[j]){
s.pop();
j++;
}
}
}
return s.empty();
}
};