题目
对测试数据3421的解释:1、2、3依次入栈,3出栈,4进栈,4、2、1依次出栈。第一遍做时在题目理解上走了一些弯路。
思路
1~n依次进栈,检测到st.top()==s[0]
时即为发现出栈起点,用while
循环将此处的出栈火车列全部出栈,再继续进栈。若最后栈空,则所有火车成功出栈,出栈序列合法。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int k; cin>>k;
for(int i = 0; i < k; i++)
{
int n; cin>>n;
string s; cin>>s;
stack<int> st;
for(int j = 1; j <= n; j++) // 1~n依次进栈,并判断是否需要出栈
{
st.push(j);
while (!st.empty() && st.top()==(s[0]-'0'))
// 栈顶元素==待判断序列首元素,此时进行出栈:注意是while
{
st.pop();
s.erase(0,1);
}
}
if(st.empty()) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
system("pause");
return 0;
}